当前位置:   article > 正文

Spring Cloud Eureka手动同步服务实现_同步服务实例到eureka列表

同步服务实例到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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

然后使用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<
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/473302
推荐阅读
相关标签
  

闽ICP备14008679号