赞
踩
当初因为业务需求的缘故,博主在Eureka
的基础上做了一定的修改和封装,用来更好的适配我们的业务需求,下面我就写写当初实现手动同步服务的过程。(有段时间不接触eureka有点遗忘,如有错误之处请见谅)
需求:手动指定任意Eureka server
上的服务同步到指定Eureka server
,可一次同步服务到多个Eureka server
。
顾名思义是将某个服务手动同步到指定的Eureka server
上。
服务之间同步是使用PeerEurekaNode来维持的
Eureka server
上注册服务既然Eureka server
之间使用PeerEurekaNode
来进行同步,那我们也借助PeerEurekaNode
来手动同步服务不就可以了?
步骤:
PeerEurekaNode
PeerEurekaNode#register
来同步服务到指定注册中心PeerEurekaNode
存储,后续维持心跳PeerEurekaNode#heartbeat
转发心跳使用PeerEurekaNodes#createPeerEurekaNode(peerEurekaNodeUrl)
来创建的
createPeerEurekaNode
方法的访问修饰符是protected
的,只允许子类访问,但是我们可以使用反射
的方式来调用
那你肯定又问PeerEurekaNodes如何创建吧,只要你使用了Spring cloud
那PeerEurekaNodes
就已经存在你的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<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。