1. feign的用途——远程调用
使用RestTemplate方式进行远程调用的时候存在一些问题:
- 代码的可读性差
- 参数复杂的时候url难以维护
feign用优雅的方式解决了以上的问题,不得不说feign太牛逼了。
2. 使用feign的步骤
(1)添加依赖
<!--引入feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
(2)在主程序上加上@@EnableFeignClients注解
(3)创建feignClient接口(这里要做的是从userservice服务中远程调用一个根据id查询用户的功能)
@FeignClient("userservice")
public interface UserClient {
//和springMVC风格相似
@GetMapping("/findUserById")
User findById(@RequestParam("id") Integer id);
}
(4) 在service层中,使用feign进行远程调用
@Autowired
private UserClient userClient;
@Override
public Order findOrderById(Integer id) {
Order orderById = orderMapper.findOrderById(id);
//不利于维护。
// String url = "http://localhost:8080/findUserById?id="+orderById.getUserId();
//使用eureka之后使用服务名称即可
// String url = "http://userservice/findUserById?id="+orderById.getUserId();
// User user = restTemplate.getForObject(url, User.class);
User user = userClient.findById(orderById.getUserId());
orderById.setUser(user);
return orderById;
}