SpringCloud学习--- Ribbon详解

Posted 小样5411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud学习--- Ribbon详解相关的知识,希望对你有一定的参考价值。

前言

上一篇Eureka详解链接

下面学习Ribbon,Ribbon是服务与服务之间的负载均衡,画图解释

跟着学习过上一篇:Eureka就知道,上一篇讲服务注册与发现,用的是用户买了商品进行支付的例子,那支付模块对于公司无疑是十分重要模块,不可能只放在一个服务器上,肯定放在多个服务器上,这样一个支付服务宕机也不会影响用户支付,多个服务器也可以分摊用户请求压力,不让支付请求都在一个服务器上,平摊压力。那customer是如何选取多个支付模块的呢?用的什么负载均衡策略呢?

首先2个支付服务会注册到Eureka中,然后customer作为服务消费方,会拉取这注册的两个支付模块到自己缓存中,然后通过Ribbon负载均衡策略,选取哪个pay调用

注意:Ribbon是客户端负载均衡,就是customer自己来选择调用哪个pay服务,而不是又服务器(服务端)来告诉customer你应该去调哪个pay,nginx就是服务端负载均衡,用它的话,它会每次告诉customer应该去调哪个pay服务


后面会将负载均衡策略,有轮巡、随机等等

一、Ribbon负载均衡实战

最好跟着我上一篇Eureka做一遍,或者拿我上一篇最后给的代码跑一跑,因为这里还会用到之前代码

第一步:启动两个pay模块,我们只有一个,所以需要进行一些配置,变成启动两个pay

新增下面内容,加个port就能知道是哪个端口启动的

四步配置好pay 8082

这样就多了一个端口可以同时访问pay服务

输入localhost:8761,如下


说明两个pay服务都能正常启动

第二步:配置负载均衡
由于是customer调用pay,即用户使用支付服务,所以customer要配置负载均衡策略,从而选定哪个服务

注意:spring-cloud-starter-netflix-eureka-client 已经默认集成了 spring-cloud-starter-netflix-ribbon,如果两个还一起导入会产生冲突

在eureka_client_customer模块的启动类中加上@LoadBalanced注解

Ribbon不用再用繁琐的获取服务规则了,只要加上服务名payClient就会自动解析成对应地址

不能用下划线,所以client_customer也写成customer,下面把不用的部分注释,用payClient服务名,@LoadBalanced负载均衡会自动解析服务名变成对应的地址

重启所有服务,使得5个服务都能在Eureka看到

输入localhost:8080/customer


不断刷新8081->8082->8081->8082,负载均衡默认的是轮巡的方式,如果有三个pay,那么就会顺序且循环访问三个pay服务

二、负载均衡策略

如果想自定义负载均衡策略呢?首先我们先了解负载均衡策略有哪些,如下,有很多,但常用就四种

四种常用负载均衡策略
1、RandomRule:随机策略
2、RoundRobbinRule:轮巡策略(默认
3、WeightResponseTimeRule:默认采用轮巡,后续根据服务响应时间分配权重,比如响应快的就多分配些请求
4、BestAvailableRule:根据被调用方并发数最小去分配

配置负载均衡策略也有两种方式(重点)
1、采用注解形式

@Bean
public IRule robbinRule(){
   return new RandomRule();
}

重启ClientCustomerApplication,策略就变成随机负载均衡,然后刷新页面可能尾号就是8081->8081->8082>8082->8081无规律随机调用服务

2、采用在yml文件中配置推荐
先注释之前的配置策略方式

此处我们给customer的yml文件配置,再重启,只要它能变回轮巡就说明配置成功,这里因为在本地所有响应时间基本没差别,就会采用轮巡

payClient:  #指定服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

然后我们每次刷新都会变8081->8082->8081->8082->8081…

配置过程中可能遇到的问题与解决方法

参考视频:https://www.bilibili.com/video/BV15e411W75G

以上是关于SpringCloud学习--- Ribbon详解的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud学习--- Feign详解(附代码压缩包)

SpringCloud学习--- Feign详解(附代码压缩包)

springcloud 微服务Spring Cloud Ribbon 负载均衡使用策略详解

SpringCloud实战微服务之——Ribbon详解

SpringCloud实战微服务之——Ribbon详解

SpringCloud学习—— 负载均衡ribbon