新河网站建设顾问,网站备案 信息,网站建设使用什么软件有哪些,商城网站建设公司爱问原因背景 spring cloud的底层负载均衡是采用Ribbon组件#xff0c;我们将user-service服务注册到eureka-server中#xff0c;那么当我们在另一个服务的代码层面请求远程调用API接口http://user-service/users/5时#xff0c;程序代码如何解析远程调用的user-service服务名转…原因背景 spring cloud的底层负载均衡是采用Ribbon组件我们将user-service服务注册到eureka-server中那么当我们在另一个服务的代码层面请求远程调用API接口http://user-service/users/5时程序代码如何解析远程调用的user-service服务名转化为相应的服务ip地址以及端口从而实现指定服务的远程调用源码跟踪 我们通过http请求服务的时候请求地址是服务名很显然是有相应的拦截器将我们的服务名拦截修改成相应的ip地址以及端口这个拦截器就是LoadBalancerInterceptor类 接下来我们进入this.loadBalancer.execute(serviceName,this.requestFactory.createRequest(request, body, execution))方法可以知道接下来获取一个负载均衡器ILoadBalancer然后通过执行getServer(loadBalancer, hint)方法采用内置的负载均衡算法从eureka-server获取的服务列表中选择其中一个服务实例 接下来我们进入getServer(loadBalancer, hint)方法如果没有配置将会采用默认的default 继续进入loadBalancer.chooseServer(hint ! null ? hint : default)方法 可以看出默认的负载均衡算法是RoundRobinRule也就是轮询的意思 最终执行可以看出当前经过负载均衡算法得到的实例服务是localhost:8081 总结 LoadBalancerInterceptor拦截我们的RestTemplate请求http://user-service/users/5RibbonLoadBalancerClient会从请求url中获取服务名称也就是user-serviceDynamicServerListLoadBalancer根据user-service到eureka-server拉取服务列表获取eureka-server返回user-service的服务列表localhost:8080、localhost:8081、localhost:8082IRule利用内置负载均衡规则从服务列表中选择一个实例例如localhost:8081RibbonLoadBalancerClient修改请求地址用localhost:8081替代user-service得到http://localhost:8081/users/5进而发起真实的http请求