Spring Cloud Eureka手动同步服务实现

前言

当初因为业务需求的缘故,博主在Eureka的基础上做了一定的修改和封装,用来更好的适配我们的业务需求,下面我就写写当初实现手动同步服务的过程。(有段时间不接触eureka有点遗忘,如有错误之处请见谅)

需求:手动指定任意Eureka server上的服务同步到指定Eureka server,可一次同步服务到多个Eureka server

什么是手动同步服务?

顾名思义是将某个服务手动同步到指定的Eureka server上。

Eureka Server之间是如何进行服务同步的?

服务之间同步是使用PeerEurekaNode来维持的

  • 使用PeerEurekaNode#register(InstanceInfo)来向其他Eureka server 上注册服务
  • 使用PeerEurekaNode#heartbeat(args…)来同步心跳的

手动同步服务实现分析

既然Eureka server之间使用PeerEurekaNode来进行同步,那我们也借助PeerEurekaNode来手动同步服务不就可以了?

步骤:

  1. 创建PeerEurekaNode
  2. 使用PeerEurekaNode#register来同步服务到指定注册中心
  3. PeerEurekaNode存储,后续维持心跳
  4. 监听服务心跳事件,使用PeerEurekaNode#heartbeat转发心跳

如何创建PeerEurekaNode?

使用PeerEurekaNodes#createPeerEurekaNode(peerEurekaNodeUrl)来创建的
createPeerEurekaNode方法的访问修饰符是protected的,只允许子类访问,但是我们可以使用反射的方式来调用
那你肯定又问PeerEurekaNodes如何创建吧,只要你使用了Spring cloudPeerEurekaNodes就已经存在你的IOC容器中了,你可以直接注入使用

private PeerEurekaNodes peerEurekaNodes;

@Autowired
public void setPeerEurekaNodes(PeerEurekaNodes peerEurekaNodes){
   
    this.peerEurekaNodes = peerEurekaNodes;
}

然后使用peerEurekaNodes.createPeerEurekaNode(peerEurekaUrl)来创建PeerEurekaNode

peerEurekaUrl:要同步的eurekaUrl,例如:http://localhost:8761/eureka/

实现手动同步服务

核心代码如下,对不相关部分进行删减

/**
 * @author mikasa
 */
@Component @Slf4j
public class PeerEurekaNodeService {
   

    @Autowired
    private PeerEurekaNodes peerEurekaNodes;
    @Autowired
    private PeerAwareInstanceRegistry peerAwareInstanceRegistry;

    // 待续约Map
    private static final Map<String, Set<PeerEurekaNode>> renewableNode = new ConcurrentHashMap<>();
    private static final<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值