前言:
假设A服务要拉取B服务,B服务有三个,按Eureka负载均衡来说,默认是轮循的,也就是说服务A拉去服务B三次,服务三个服务B都会接收到一次请求。
可以通过配置来改变配置负载均衡规则:
//负载均衡的配置,默认轮循
@Bean
public IRule randomRule() {
return new RandomRule();//new 规则自定义
}
创建三个集群B,分为两组,第一组名叫:HZ,第二组名叫sh
按Nacos默认的负载均衡规则来说,服务A拉取三次服务B,会跟Eureka一样分别请求如图的三个服务各一次。
关于配置Nacos的集群相关配置,具体如下:
(除去了一些数据库配置,只展示nacos相关的配置)
集群配置:服务A
spring: application: name: oderservice #服务A名称 cloud: nacos: server-addr: localhost:8848 #nacos服务地址 discovery: cluster-name: HZ #服务A集群的名称
userservice: #服务B的名称,一定要对应哦 ribbon: #配置一对一访问 NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
服务B 配置yml文件配置(注意,待会儿复制服务B最后一次的时候修改下面配置集群的名称):
spring: application: name: userservice #服务B名称 cloud: nacos: server-addr: localhost:8848 #nacos服务地址 discovery: cluster-name: sh #服务B集群的名称
---------------------------------------------------------------------------------------
注意:注释掉你配置的负载均衡规则,否则该配置不生效,如下注释掉
//负载均衡的配置,默认轮循
/* @Bean
public IRule randomRule() {
return new RandomRule();
}*/
第一步,在idea最下面找到服务按钮,(我是汉化,你们英文的名称就叫service)
打开后,找到对应到B服务,然后右击复制:
然后将服务B复制两个出来,记得配置图片中-Dserver.port=端口号
然后点击确定,并启动服务
然后复制最后一个服务的时候,记得改集群名称,我起的名称是HZ
---------------------------------------------------------------------------------------
全部启动好后,启动nacos点击服务列表,展示效果如下:
然后测试一遍,让服务A发送给服务B 5次请求,看看会不会都访问到B服务集群中的HZ服务上
查看日志:
服务B集群中的HZ集群中实例的日志:
服务B集群中第一个的sh实例日志:
服务B集群中第二个的sh实例日志:
完美,因为A服务已经配置了服务名为HZ,并且还配置了对应的服务B,请求的时候,服务A会优先访问服务B中名为HZ的集群组中的实例,如果服务B中HZ集群中的服务都宕机了,那么才会访问服务B中的sh集群中的服务。