【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
之前我们通过修改user-service 的配置,达到了下面的集群效果
8081、8082 在杭州,8083 在上海
最终我们想实现的效果是order-service 调用user 服务时,优先调用本地的服务
现在为order-service 也整一个集群属性
discovery:
cluster-name: HZ #集群名称
OK,启动order-service
OK
查看一下Nacos 控制台
OK,orderservice 在HZ【即现在order-service 与 8081、8082 在相同集群】
直接测试访问3次
查看IDEA 的日志
好家伙,效果很明显,三个user-service, 一个接了一次【轮询】
这说明还没有达到目的【因为我们还没有配置,默认IRule 就是轮询】
在order-service中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务:
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
OK,重启order服务
再次测试三次
OK,回到IDEA 查看日志信息
OK, 效果很明显,8083 一个也没接到,8082接到两个,8081接到1 个【8081和8082 随机】【反正不是轮询了,而且实现了就近集群访问】
现在问题来了,如果我把8081 和 8082 停掉
查看一下Nacos 控制台
这样user-service 就只剩下上海的8083 了
现在如果再发起请求,试试
没问题,8083 还是接到了 ,就说明本地集群没有服务时,也能够访问
看看order 的日志
这样子也方便运维人员发现问题,重新启动挂掉的服务