通过一张大图简单描述下Feign的核心处理流程
目录
- 一图百文
- 核心配置参数
1.一张大图说明Feign的核心流程

前提说明,假设此处由一个eureka-client服务作为client,调用另一个服务eureka-order作为server,则在服务eureka-client中有一个@FeignClient标注的类OrderClient,而server端会提供一个接口,那么发起请求流程如下
- 请求从controller中发起,会调用一个FeignClient注解的接口
OrderClient - 在这里
Feign的核心机制肯定会扫描@FeignClient标注的所有接口,通过动态代理实现该接口 - 而在
OrderClient中会有多个方法,使用了SpringMVC的注解@RequestMapping或者@GetMapping等,这里会生成urlhttp://SERVICE-ORDER/order/{id} - 接下来会拿到
@RequestMapping标注的方法中的请求参数,完善请求url为http://SERVICE-ORDER/order/1?status=2 - 接下来就是Ribbon相关的处理逻辑了
- Ribbon从EurekaClient中获取的对应的ServerList,通过负载均衡算法选取出一台实例
192.168.0.0.1:8080 - 再次替换url为
[http://192.168.0.0.1:8080/order/1?status=2](http://192.168.0.0.1:8080/order/1?status=2),此时url已经完成 - 则通过http组件完成服务的调用,获取到对应的json数据
- Ribbon从EurekaClient中获取的对应的ServerList,通过负载均衡算法选取出一台实例
- 将对应的json数据转换成实例bean,返回给请求
2.feign的核心参数
Feign配置的核心参数涉及到以下几个,其中
eureka-order是对应的服务名
feign.client.config.eureka-order.connect-timeout=5000* feign.client.config.eureka-order.read-timeout=5000feign.client.config.eureka-order.logger-level=fullfeign.client.config.eureka-order.decode404=falsefeign.client.config.default.connect-timeout=5000feign.client.config.default.read-timeout=5000feign.client.config.default.logger-level=fullfeign.client.config.default.decode404=false

