spring-eureka 源码解读----作为集群的eureka怎么样实现不做二次传播
Posted 像我这样的人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-eureka 源码解读----作为集群的eureka怎么样实现不做二次传播相关的知识,希望对你有一定的参考价值。
在平时工作中,eureka作为一个集群时候,我们会配置多个peer ,假设当前有服务器eureka-A,eureka-B,eureka-C。
如果Eureka A的peer指向了B, B的peer指向了C,那么当服务向A注册时,B中会有该服务的注册信息,但是C中没有。也就是说,如果你希望只要向一台Eureka注册其它所有实例都能得到注册信息,那么就必须把其它所有节点都配置到当前Eureka的peer
属性中。这一逻辑是在PeerAwareInstanceRegistryImpl#replicateToPeers()
方法中实现的:
private void replicateToPeers(Action action, String appName, String id,
InstanceInfo info /* optional */,
InstanceStatus newStatus /* optional */, boolean isReplication) {
Stopwatch tracer = action.getTimer().start();
try {
if (isReplication) {
numberOfReplicationsLastMin.increment();
}
// 如果这条注册信息是其它Eureka同步过的则不会再继续传播给自己的peer节点
if (peerEurekaNodes == Collections.EMPTY_LIST || isReplication) {
return;
}
for (final PeerEurekaNode node : peerEurekaNodes.getPeerEurekaNodes()) {
// 不要向自己发同步请求
if (peerEurekaNodes.isThisMyUrl(node.getServiceUrl())) {
continue;
}
replicateInstanceActionsToPeers(action, appName, id, info, newStatus, node);
}
} finally {
tracer.stop();
}
}
以上是关于spring-eureka 源码解读----作为集群的eureka怎么样实现不做二次传播的主要内容,如果未能解决你的问题,请参考以下文章
TrainData类型数据集(OpenCV案例源码letter_recog.cpp解读2)