springcloud学习手册-Ribbon(第二节)

导读 |整合ribbon

一、如何添加并整合Ribbon

这段英文中主要提到添加整合Ribbon,需要引入spring-cloud-starter-ribbon 这个资源,但默认spring-cloud-starter-erueka的资源包已经包含了对于ribbon的实现。所以在pom.xml 配置中就不需要引入这个资源路径了。前面咱们已经介绍过erueka的引入和实现。

二、怎么使用Ribbon呢?使用Ribbon非常简单,不信往下看。

如何使用ribbon呢,主要是在启动类中添加@LoadBalanced注解。

在RestTemplate 上面添加@LoadBalanced这个注解,就可以实现使用ribbon;服务消费者直接通过调用被@LoadBalanced 注解修饰过的RestTemplate 来实现面向服务的接口调用 。RestTemplate,会使用Ribbon的自动化配置,通过@LoadBalanced开启客户端负载均衡。

GET请求 :getForEntity函数,它是对HTTP请求响应的封闭,其中主要存储了HTTP的几个重要元素。其它还包含:POST请求、PUT请求、DELETE请求。

三、Ribbon使用的策略

使用的是默认的策略,默认是轮询策略

四、@LoadBalancerClient

在Riibon中一个重要的组件为LoadBalancerClient,它作为负载均衡的一个客户端。它在spring-cloud-commons包下的LoadBalancerClient是一个接口,它的实现类是RibbonLoadBalancerClient 。最终的负载均衡的请求处理,由它来执行。

LoadBalancerClient是在初始化的时候,会向Eureka回去服务注册列表,并且向通过10s一次向EurekaClient发送“ping”,来判断服务的可用性,如果服务的可用性发生了改变或者服务数量和之前的不一致,则更新或者重新拉取。LoadBalancerClient有了这些服务注册列表,就可以根据具体的IRule来进行负载均衡。

五、为什么在RestTemplate加一个@LoadBalance注解就可以开启负载均衡呢?

LoadBalancerAutoConfiguration类,即LoadBalancer自动配置类。在该类中,首先维护了一个被@LoadBalanced修饰的RestTemplate对象的List,在初始化的过程中,通过调用customizer.customize(restTemplate)方法来RestTemplate增加拦截器LoadBalancerInterceptor。而LoadBalancerInterceptor,用于实时拦截,在LoadBalancerInterceptor这里实现来负载均衡。

六、总结

Ribbon的负载均衡,主要通过LoadBalancerClient来实现的,而LoadBalancerClient具体交给了ILoadBalancer来处理,ILoadBalancer通过配置IRule、IPing等信息,并向EurekaClient获取注册列表的信息,并默认10秒一次向EurekaClient发送“ping”,进而检查是否更新服务列表,最后,得到注册列表后,ILoadBalancer根据IRule的策略进行负载均衡。

而RestTemplate 被@LoadBalance注解后,能过用负载均衡,主要是维护了一个被@LoadBalance注解的RestTemplate列表,并给列表中的RestTemplate添加拦截器,进而交给负载均衡器去处理。

声明:文章属于个人原创,转载请注明文章出处

相关阅读:

springcloud学习手册-Ribbon(第一节)

原文发布于微信公众号 - 全华班(quanhuaban)

原文发表时间:2017-12-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏会跳舞的机器人

Spring Cloud(5)——熔断器

Hystrix熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

883
来自专栏熊二哥

ASPNET_WEBAPI快速学习02

这部分内容的学习,已经放了大半年时间了,果断补充上,尽早将过去遗留的老技术坑都补上。首先将介绍服务幂等性的概念和相关解决方案,这部分也将是本文的理解难点,由于W...

1766
来自专栏斑斓

Redux框架reducer对状态的处理

前言 在react+redux项目里,关于reducer处理state的方式,在redux官方文档中有这样一段描述: 不要修改 state。 使用 Objec...

3515
来自专栏哲学驱动设计

多层分布式设计模式

    原来就想写一些关于分布式的设计。正好目前开发的GIX4项目中,需要对客户端的许多操作进行记录。这个功能的设计或多或少能说明,一般情况下,多层的分布式系统...

1815
来自专栏SDNLAB

Ryu:模块间通信机制分析

Ryu是一款非常轻便的SDN控制器,在科研方面得到了广泛的应用。相比其他控制器,受益于Python语言,在Ryu上开发SDN应用的效率要远高于其他控制器。为了解...

3368
来自专栏互扯程序

最火的秒杀是如何实现的?

使用联合查询避免同一用户多次秒杀同一商品(利用在插入购物明细表中的秒杀id和用户的唯一标识来避免)。

753
来自专栏大魏分享(微信公众号:david-share)

实战:将POJO类转换为EJB | 从开发角度看应用架构6

835
来自专栏恰同学骚年

.NET Core微服务之服务间的调用方式(REST and RPC)

  微服务之间的接口调用通常包含两个部分,序列化和通信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、by...

1076
来自专栏领域驱动设计DDD实战进阶

微服务实战(七):落地微服务架构到直销系统(实现命令与命令处理器)

我们先来看看CQRS架构,你对下图的架构还有印象吗?每个组件的功能都还清楚吗?如果有疑问,请查考文章《微服务实战(五):落地微服务架构到直销系统(构建高性能大并...

723
来自专栏智能大石头

改进版CodeTimer及XCode性能测试

在测试XCode性能的时候,发现每次执行测试程序得到的执行时间差距实在太大,于是采用了老赵的CodeTimer来计算线程时间,后来因为测试程序稍微有点复杂,在使...

2487

扫码关注云+社区