通过一张大图简单描述下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=5000
feign.client.config.eureka-order.logger-level=full
feign.client.config.eureka-order.decode404=false
feign.client.config.default.connect-timeout=5000
feign.client.config.default.read-timeout=5000
feign.client.config.default.logger-level=full
feign.client.config.default.decode404=false