Netflix源码解析之Ribbon:看客户端如何使用Ribbon

前面描述了netfix的ribbon基本功能和其实现方式。这里从调用的地方入手跟踪下ribbon使用的过程,了解下ribbon是如何被使用的。

关注下AbstractLoadBalancerAwareClient,一个集成了一个ribbon,因而具备客户端负载均衡功能的客户端抽象父类。下面的com.netflix.niws.client.http.RestClient和org.springframework.cloud.netflix.feign.ribbon.FeignLoadBalancer都是在继承这个抽象类的基础上实现一个有负载均衡功能的客户端。 如SampleApp.java提供的这个例子中,就是使用了RestClient。

调用的入口是com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer。 输入是一个S类型的request,输出是一个T类型的response,S和T类型在

中定义好了。如RestClient public class RestClient extends AbstractLoadBalancerAwareClient<HttpRequest, HttpResponse> 中请求和应答就是HttpRequest, HttpResponse类型。 builder模式使用with的语法执行set操作方式为LoadBalancerCommand绑定Loandbalancer,RetryHandler等。使用LB选择一个后端server,将请求发送到后端server,并使用一定的重试机制,并在过程中将请求的情况记录在status中。

可以看到根据server的信息重新构造url,其实就是重新拼host:port/path这样的访问地址。

这里关注下获得后端server的过程。 com.netflix.loadbalancer.reactive.LoadBalancerCommand.submit

可以看到最终还是用到了LB的com.netflix.loadbalancer.ILoadBalancer.chooseServer(Object key)

完。

?

原创文章。为了维护文章的版本一致、最新、可追溯,转载请注明: 转载自idouba

本文链接地址: Netflix源码解析之Ribbon:看客户端如何使用Ribbon


, , , ,

One Response to Netflix源码解析之Ribbon:看客户端如何使用Ribbon

  1. 匿名 2017年4月14日 at 下午4:00 #

    SampleApp.java 里面的API貌似很多都过时了

发表评论