nisbos


Ribbon(基于OpenFeign)

<h1>概述</h1> <h3>Ribbon</h3> <p>        Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。</p> <h3>RibbonOpenFeign、Hystrix与Ribbon的关系</h3> <pre><code> OpenFeign相比Ribbon在代码实现上是在客户端多了一层接口,之前用ribbon的时候客户端只有controller层,通过restTemplate请求服务端的controller层。Openfeign需要在客户端创建一个service层,并创建一个service接口(要用到@FeignClient注解),其方法和服务端的controller里的方法相对应,之后客户端的controller调这个接口就行了。</code></pre> <p>      OpenFeign的引入直接砍掉了restTemplate,客户端controller在调用服务端时不需要再关注请求的方式、地址以及是forObject还是forEntity,完全面向接口调用,层次结构更加明了,而且OpenFeign自身集成Ribbon,所以默认开启随机的负载均衡。(虽然Eureka也集成了ribbon,但大概是eureka已经停更了,所以openFeign集成了ribbon)。而且还可以和hystrix相结合,写一个类实现service接口,其中实现的方法的方法体便是降级或熔断的fallback方法(需要在接口中指定该实现类)。这样结构更清晰,耦合也更低。</p> <h1>环境安装</h1> <h4>参照OpenFeign环境安装</h4> <p><a href="https://www.showdoc.cc/chlingm?page_id=4628647766074457" title="OpenFeign">OpenFeign</a></p> <h1>场景预览</h1> <h3>OpenFeign未使用Ribbon响应时间权重算法(默认随机):</h3> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/05086e194fa8c6b6f710a1ec3278f78a?showdoc=.jpg" alt="" /></p> <h3>OpenFeign使用Ribbon响应时间权重算法:</h3> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/42312083729cbc843d3137d0090757f9?showdoc=.jpg" alt="" /></p> <h3>通过对比可发现:</h3> <pre><code>如果服务消费者未使用Ribbon响应时间权重算法,那么默认是采用随机算法访问服务提供者a和服务提供者b。服务提供者a和服务提供者b被访问的概率各为50% 使用Ribbon响应时间权重算法,可以为每一个服务提供者赋予一个权重值。服务器响应时间越长,这个服务提供者的权重就越小,被访问到的概率就越小。这种算法可以很好地为服务提供者实现能者多劳的功能。</code></pre> <h1>快速入门</h1> <h3>根据实际需求,在服务消费者的application.yml中配置:</h3> <pre><code>ribbon: # feign调用超时时间,默认1s ReadTimeout: 10000 # ribbon配置2s刷新一次服务列表,默认30s ServerListRefreshInterval: 2000 stu-provide: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule #配置规则 响应时间权重 # NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #配置规则 随机 # NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #配置规则 轮询 # NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule #配置规则 重试 # NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #配置规则 最空闲连接策略</code></pre>

页面列表

ITEM_HTML