zoukankan      html  css  js  c++  java
  • Spring cloud服务调用(Feign)

    (一)添加依赖
    
      在项目 user-api 添加 feign 依赖:
    
    <!-- 依赖 Spring Cloud Netflix Feign -->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
    
    (二)申明 Feign 客户端
    
      这里改造的是 user-api 项目下的 服务接口:UserService
    
    /**
    * 注解 @FeignClient:申明 Feign 客户端
    * @author 咸鱼
    * @date 2018/11/11 16:37
    */
    @FeignClient(name = "${user.service.name}")//利用占位符,避免未来整合时硬编码
    public interface UserService {
    /**
    * 保存用户
    * @param user 待保存对象 {@link User}
    * @return true 成功 false 失败
    */
    @PostMapping("/user/save")
    boolean saveUser(User user);
    
    /**
    * 查找所有用户
    * @return 用户列表
    */
    @GetMapping("/user/find/all")
    List<User> findAll();
    }
    注意:在使用 @FeignClient name 属性尽量使用占位符,避免硬编码。否则,未来升级时,不得不升级客户端版本。
    
    对上面的改造做一个简单的解析:
      在以前,我们 客户端(服务调用方) 调用 服务端(服务提供方) 提供的服务时,使用的是 restTemplate.getForObject("http://" + serviceProviderName + "/user/find/all",List.class),而我们这里的改造,就是将其转换成这段代码。
      比如 @FeignClient(name = "${user.service.name}") 这里的 ${user.service.name} 就是我们的 服务端(服务提供方)应用名,也就是上面的 serviceProviderName;而 @GetMapping("/user/find/all") 也就是 上面的 "/user/find/all" 路径。
      在改造完成以后,Feign 框架会自动组装 @FeignClient(name = "${user.service.name}") 和 @GetMapping("/user/find/all") 变为 "http://" + serviceProviderName + "/user/find/all"。
    
    (三)激活 Feign 客户端
    
      需要在 客户端(服务调用方) 激活 Feign,这里的服务调用方就是 user-ribbon-client 项目。
    
      使用 @EnableFeignClients 激活 Feign 客户端。
    
    /**
    * 注解 @RibbonClient:激活 Ribbon
    * 注解 @EnableCircuitBreaker:激活 服务短路
    * 注解 @EnableFeignClients:激活 Feign 客户端
    */
    @EnableFeignClients(clients = UserService.class)//clients 属性:申明 UserService 接口作为 Feign Client 调用
    @EnableCircuitBreaker
    @SpringBootApplication
    @RibbonClient("user-service-provider")//指定目标应用名称
    public class UserServiceClientApplication {
    ......
    }
  • 相关阅读:
    Qt5中QMessageBox::warning()的第一个参数写this时出错
    Qt5如何设置静态编译,解决生成的可执行文件打开出错问题
    SpringCloud OAuth2实现单点登录以及OAuth2源码原理解析
    Redis分区
    Redis持久化
    如何合理地估算线程池大小?
    并发减库存
    Java导出Excel
    电商促销后台逻辑
    Java8虚拟机内存模型
  • 原文地址:https://www.cnblogs.com/pan-my/p/11429946.html
Copyright © 2011-2022 走看看