在spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的RestTemplate。但是,用起来最方便、最优雅的还是要属Feign了。
通过Feign, 我们能把HTTP远程调用对开发者完全透明,得到与调用本地方法一致的编码体验。这一点与阿里Dubbo中暴露远程服务的方式类似,区别在于Dubbo是基于私有二进制协议,而Feign本质上还是个HTTP客户端。如果是在用Spring Cloud Netflix搭建微服务,那么Feign无疑是最佳选择。
feign使用
@FeignClient("shop-app")
public interface ShopFeignService {
@RequestMapping(value = "/shop/list-by-companyId", method = RequestMethod.GET)
UserWebResponse<List<Integer>> listByCompanyId(@RequestParam(value = "companyId") Integer companyId);
主程序
@EnableFeignClients
@EnableEurekaClient
public class UserWebApplication {
当然还要引入对应的jar包,so简单,so开心……
一些核心类及大致流程:
摘自吉姆餐厅ak