Feign + Eureka + Ribbon
2020-11-21 23:56:07 37 举报
Feign + Eureka + ribbon + springCloud 结合流程图
作者其他创作
大纲/内容
选择
ZoneAwareLoadBalancer(ribbon)
RibbonRequest(cloud.feign.ribbon)
FeignLoadBalancer(cloud.feign.ribbon)
FeignClientsRegistrar(cloud-feign)
注入
Response
AbstractLoadBalancerAwareClient(ribbon)
Server(ribbon)
Request
ResponseCache(eureka【服务端】)
EurekaServerInitializerConfiguration(cloud.eureka【服务端】)
代理对象
执行代理方法
Ribbon从Eureka获取服务实例列表
注册FeingClient工厂Bean
new
SynchronousMethodHandler(feign)
EurekaDiscoveryClient(cloud.eureka【客户端】)
LoadBalancerFeignClient(cloud.feign.ribbon)
@EnableEurekaServer(cloud.eureka【服务端】)
Feign.builder(feign)
EurekaClient(eureka【客户端】)
IRule(ribbon)
EurekaServerAutoConfiguration(cloud.eureka【服务端】)
创建
ApplicationsResource(eureka【服务端】)
FeignClientFactoryBean(cloud-feign)
@EnableFeignClients(cloud-feign)
DiscoveryEnabledNIWSServerList(ribbon.eureka)
newInstance
提交Feign请求到Feign客户端
IResponse
EurekaServer(eureka【服务端】)
Eureka客户端拉取服务实例注册表
build
RibbonResponse(cloud.feign.ribbon)
Feign
Eureka服务端维护服务实例注册表
decoder
Spring Cloud Feign
解码请求结果
注册Eureka客户端
EurekaServerBootstrap(cloud.eureka【服务端】)
Client
提交请求
注册Eureka服务端
register
使用负载均衡客户端提交负载均衡请求
1. 为注释了FeignClient的接口注册一个FeignClientFactoryBean,之后便可以被注入到其他的Bean中;2. FeignClientFactoryBean利用Feign.builder生产出动态代理对象;3. 动态代理对象调用接口方法,方法被封装成一个Feign请求提交给Feign客户端,Spring整合了Feign和 Ribbon的代码后,LoadBalancerFeignClient作为一个Feign客户端接受请求。4. LoadBalancerFeignClient客户端将请求封装为Ribbon的负载均衡请求并提交给负载均衡客户端,Spring 整合了Ribbon 和 Feign的代码,FeignLoadBalancer 作为一个负载均衡客户端接受请求5. 负载均衡客户端使用负载均衡器ILoadBalancer选择服务实例,整合了Eureka的代码后,DiscoveryEnabledNIWSServerList为负载均衡器提供服务实例列表;6. DiscoveryEnabledNIWSServerList 持有Eureka客户端实例,Eureka客户端会定期从Eureka服务端拉取最新的服务列表,Eureka客户端是由Spring注入;7. Eureka服务端的实例列表是由一个二级缓存ResponseCache和一个注册表ConcurrentHashMap构成,通过各种由Resource类映射的Rest接口维护,Eureka服务端是由Spring注入并在容器的生命周期方法中初始化和启动;8. 负载均衡客户端选出服务实例后,将请求封装为Feign提交给Feign客户端,这里的Feign客户端不再是LoadBalancerFeignClient,而是实际执行远程访问的feign客户端,如Client.Default/ApacheHttpClient/OkHttpClient9. feign客户端执行请求后返回feign响应,feign响应最终通过解码,将请求结果返回给调用方法,整个流程结束
DynamicServerListLoadBalancer(ribbon)
使用
import
请求
LoadBalancerCommand(ribbon)
RibbonRequest
ReflectiveFeign.FeignInvocationHandler(feign)
EurekaClientAutoConfiguration(cloud.eureka【客户端】)
PeerAwareInstanceRegistry(eureka【服务端】)
使用Feign客户端执行Feign请求
Ribbon负载均衡选出服务实例
EurekaTransport(eureka【客户端】)
Feign(feign)
找出对应方法的执行方法
扫描
初始化
EurekaHttpClient(eureka【客户端】)
EurekaClientConfig(cloud.eureka【客户端】)
生产动态代理对象
0 条评论
回复 删除
下一页