由于在Nacos上,支持集群配置。集群是对指定微服务的一种虚拟分类。集群还是比较有用的,例如:
为了容灾,把指定微服务同时部署在两个机房(例如同城多活【其中1个机房崩溃另一个机房还能顶】、异地多活【防止自然灾害,例如地震什么的】),比如南京机房和北京机房。
调用时,可优先调用同机房的实例,如果同机房没有实例,再跨机房调用。
当然cluster还有很多其他作用,请各位看客自行脑补,本文将围绕上面描述的场景展开。
虽然Spring Cloud Alibaba支持集群配置,例如:
spring:
cloud:
nacos:
discovery:
# 北京机房集群
cluster-name: BJ
但在调用时,服务消费者并不会优先调用同集群的实例。
本节来探讨如何扩展Ribbon,从而实现同集群优先调用的效果,并且还能支持Nacos权重配置。关于权重配置,在 扩展Ribbon支持Nacos权重的三种方式 一文中已经写得比较详细了。本文在前面的基础上实现同集群优先策略。
写代码
@Slf4j
public class NacosRule extends AbstractLoadBalancerRule {
@Autowired
private NacosDiscoveryProperties nacosDiscoveryProperties;
@Override
public Server choose(Object key) {
try {
String clusterName = this.nacosDiscoveryProperties.getClusterName();
DynamicServerListLoadBalancer loadBalancer