本文给大家讲的内容是SpringCloudRibbon,希望大家多提提建议;
Spring Cloud Ribbon
Ribbon的中文名称是“丝带”或者“蝴蝶结”,寓意Ribbon可以向丝带一样和其他组件配套使用。Ribbon可以和Eureka对接实现Eureka Client的客户端软件负载均衡,Eureka在发现后端服务数据后,Ribbon可以根据后端服务的元数据信息进行灵活的动态路由和负载均衡;也可以直接使用Ribbon提供的注解实现客户端软件负载均衡;当Ribbon应用在微服务网关Zuul中时,可以实现服务端的定制化路由转发和负载均衡。
Ribbon虽然不像服务注册中心、服务配置中心、微服务网关一样是微服务架构的运行时服务单元,但是Ribbon作为一个工具类框架,几乎出现在Spring Cloud微服务体系的每一个微服务和基础设施中,实现基于HTTP、TCP的客户端负载均衡。
Ribbon的接入与配置
1.添加Maven依赖
spring-cloud-starter-ribbon 是 对 spring-cloud-starternetflix-ribbon包的封装,其包含的组件有:
● ribbon
● ribbon-httpclient
● spring-cloud-strater
● spring-cloud-starter-netflix-archaius
● spring-cloud-netflix-core
2.定义配置类
在该配置类中创建RestTemplate,并且使用@LoadBalanced注解。该注解使得RestTemplate具有了客户端负载均衡的能力。
3.实现Ribbon服务端服务
在pom.xml文件中需要加入Eureka-Client的依赖:
在application.yml文件中配置端口号和应用名称等信息:
提供一个Ribbon服务端Controller接口,示例如下:
启动两个服务提供者实例,端口号分别为2222和2223。
4.定义Ribbon客户端消费服务
场景一:Ribbon与Eureka联合使用,Ribbon的服务端列表从Eureka注册中心动态发现获得,首先在pom.xml文件中引入如下主要依赖。
在application.yml文件中配置端口号和应用名称等信息:
Ribbon消费服务使用的接口示例如下:
启动上述配置的各环境实例,访问消费服务接口,我们会发现在两个服务提供者的实例控制台轮流输出“invoke my service”信息。
因为Ribbon默认的负载均衡策略为轮询,所以会交替访问两个实例。
场景二:在禁用Eureka的情况下,Ribbon的服务端列表需要在配置文件中指定。修改客户端的application.yml配置文件,添加配置Ribbon客户端的信息:
在上面的配置中,我们设置了eureka.enabled、listOfServers和ServerListRefreshInterval三个属性。Ribbon中的负载均衡器默认通过Eureka来发现服务端列表,在我们的例子中,因为没有使用Eureka,所以将ribbon.eureka.enabled属性设置为false。取而代之,我们通过listOfServers为Ribbon提供了静态的服务端列表。
ServerListRefreshInterval属性表示服务端列表的刷新时间间隔,单位为毫秒。
然后,在ClientApplication类中,我们将RestTemplate切换到使用Ribbon客户端来获取服务端地址。
在 RestTemplate Bean 上 加 上 @LoadBalanced 注 解 , 就 能 让RestTemplate在请求时具备负载均衡的能力。同时,对这个类添加@RibbonClient注解,并指明客户端的名字和额外的配置类。额外的配置类可以设置负载均衡规则等。
我们可以通过创建具有相同名称的Bean来覆盖Spring CloudNetflix的任何与Ribbon相关的Bean。这里我们覆盖了默认负载均衡使用的IPing和IRule。默认的IPing是一个NoOpPing(并没有真正Ping服务端实例),默认的IRule是一个ZoneAvoidanceRule。
IPing会发送Ping命令给一个URL来检测服务端是否正常,所以我们的服务端中有一个匹配路径的方法,提供对Ping命令的检查功能。
IRule 使 用 的 是 AvailabilityFilteringRule 实 现 , 将 会 使 用Ribbon内置的断路由功能来过滤掉“断开”的服务器。如果Ping一个服务器连接失败或者读取失败,Ribbon会认为这个服务器已经失效,直到它能够正常返回才会对其进行负载均衡访问。
Ribbon测试流程
(1)分别使用以下命令启动三个服务端实例。
(2)启动客户端实例$mvn spring-boot:run。
(3)访问http://localhost:8888/hi,然后观察服务端实例,你会发现三个服务端实例都收到了Ribbon的Ping信息。
(4)刷新浏览器,多次访问http://localhost:8888/hi,你会发现请求将会轮流被三个服务端实例的中一个处理。
(5)关闭其中一个服务端实例,一旦Ribbon已经Ping到它没有响应,你会发现请求将在剩下的实例中进行负载均衡处理。
本文给大家讲解的内容是Spring Cloud Ribbon
- 下篇文章给大家讲解的内容是Ribbon的核心工作原理
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。