12-ribben-负载均衡原理
当ribben和eureka 放一起看待的时候
ribben的基本原理:
- 利用注解@LoadBalanced给restTemplate添加拦截器-LoadBalancerInterceptor
request.getURI()
:获取请求uri,本例中就是 http://user-service/user/8originalUri.getHost()
:获取uri路径的主机名,其实就是服务id,user-service
this.loadBalancer.execute()
:处理服务id,和用户请求。- 拦截器中通过 LoadBalancerClient 客户端对服务名称进行替换
- getLoadBalancer(serviceId):根据服务id获取ILoadBalancer,而ILoadBalancer会拿着服务id去eureka中获取服务列表并保存起来。
- getServer(loadBalancer):利用内置的负载均衡算法,从服务列表中选择一个。本例中,可以看到获取了8082端口的服务
- LoadBalancerClient 通过 负载平衡器 ILoadBalancer获得最后的IP端口
- ILoadBalancer 是 SpringClientFactory 生产出来的 工厂实际生产的子类是 dynamicServerListLoadBalancer
- 获取平衡器以后就选择平衡策略
- 选择的方法进去以后可以明显看出是规则类进行实际判断
- 以下给出规则类的继承树