一:Ribbon简介
Ribbon是Netflix公司开源的一个负载均衡的项目,是一个客户端负载均衡器,运行在客户端上。它是一个经过了云端测试的IPC库,可以很好地控制HTTP和TCP客户端的一些行为。Feign已经默认使用了Ribbon。
二:Ribbon的工作流程
1:user微服务1、user微服务2、user微服务3是一个服务集群,它们都会向注册中心注册服务(它们的应用名都是USER-SERVICE)
2:注册中心记录集群元数据信息,即USER-SERVICE下有3个服务节点
3:Ribbon拦截所有的请求,从请求信息中获取应用名
4:ribbon根据应用名从eureka注册中心获取服务列表
5:ribbon从服务列表中通过相关均衡策略获取具体某个服务
6:请求远程服务
三:Ribbon源码解析
第一步:Ribbon拦截请求,获取应用名LoadBalancerAutoConfiguration是Ribbon的自动配置类,在这个配置类里面配置了一个拦截器,该拦截器会拦截所有请求,这就是Ribbon的入口
LoadBalancerInterceptor的intercept方法(当远程调用的时候都会被拦截器拦截)
@Overridepublic ClientHttpResponse intercept(final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) throws IOException { final URI originalUri = request.getURI(); String serviceName = originalUri.getHost();//这里就是获取应用名可以打断点测试 Assert.state(serviceName != null, "Request URI does not contain a valid hostname: " + originalUri); return this.loadBalancer.execute(serviceName, requestFactory.createRequest(request, body, execution));}