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)

源码解读YOLO v3 训练 - 02 网络结构

cycleGAN源码解读:数据读取

vue源码解读0-2

#yyds干货盘点# mybatis源码解读:cursor包

源码级别解读 mybatis 插件