(一)添加依赖
在项目 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 {
......
}
转载于:https://www.cnblogs.com/pan-my/p/11429946.html