Feign
1.
(1)Feign是简化Java HTTP客户端开发的工具,是通过处理注解生成Request,从而实现简化Http API开发的目的,即开发人员可以使用注解的方式定制Request api模板,在发送请求http requst之前,feign通过处理注解的方式替换掉request模板中的参数,这种实现方式更为直接,可理解。
(2) Feign是一种声明式,模板化的HTTP客户端,可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,感知不到是远程方法和HTTP请求.
2.
注解
@FeignClient:
为了让Feign知道在调用方法时应该像哪个地址发送请求以及请求需要带哪些参数,需要定义一个接口:
@FeignClient(name=”bimernet-core-service”)
Public interface CoreFeignClientService{
@RequestMapping(value=”/api/user/{id}”,method=RequestMethod.GET)
Public BySessionResponse getUserById(@PathVariable(“id”) String id);
}
说明:
@FeignClient:用于通知Feign组件对该接口进行代理(不需要编写接口实现),使用者可直接通过@Autowired注入
@RequestMapping表示在调用该方法时需要向以上路径发送GET请求
3.
运行机理:
Spring Cloud应用在启动时,Feign会扫描标有@FeignClient注解的接口,生成代理,并注册到Spring容器中,生成代理时,Feign会为每个接口方法创建一个RequestTemplate对象,该对象封装了HTTP请求需要的全部信息,请求参数名,请求方法等都是在这个过程中确定的,Feign的模板化体现在这里。
例子中是将Feign与Eureka和Ribbon(?)组合使用,@FeignClient(name=”bimernet-core-service”)
意为通知Feign在调用接口时要向Eureka中查询名为bimernet-core-service的服务,从而得到服务的URL
4.
总结:
通过Feign,我们能把远程调用对开发者完全透明,得到与调用本地方法一致的编码体验,这一点与阿里Dubbo中暴露远程服务的方式类似,区别在于Dubbo是基于私有二进制协议,而Feign本质上还是一个HTTP客户端,如果在用Spring Cloud Netflix搭建微服务,那么Feign是最佳选择。
5.
总结:
@FeignClient(name =””,fallBackMethod=””)中name属性中使用的是Eureka服务发现,找到名为……的服务,然后找到对应的URL
FallBackMethod属性使用的是Hystrix熔断机制,服务断掉的话就转向别的方法,去替换请求失败的服务。