专栏首页JavaJourney几个你不知道的dubbo注册中心细节

几个你不知道的dubbo注册中心细节

你会正确配置backup地址吗?

在配置dubbo注册中心时,一般会这样写

dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181

也会简单地写成

dubbo.registry.address=zookeeper://127.0.0.1:2181

当zookeeper地址不止一个,需要配置backup地址时,会这样写

dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181,127.0.0.1:2182

这时候如果你简写成这样

dubbo.registry.address=zookeeper://127.0.0.1:2181,127.0.0.1:2182

那就启动报错了~看下报错日志

java.lang.IllegalStateException: Failed to receive INITIALIZED event from zookeeper, pls. check if url zookeeper://127.0.0.1:2181,127.0.0.1:2182/org.apache.dubbo.metadata.report.MetadataReport?client=&dubbo.config-center.root-path=/ is correct

为什么会这样?

从源码上能看出,当address中包含://时就认为address配置的是一个URL,此时如果要配置backup地址必须在URL参数中指定backup参数才行;

dubbo.registry.address=zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182

但当address中不包含://时,dubbo认为你配置的第一个地址是主,逗号后的地址都是backup。

多注册中心有什么猫腻?

多注册中心可以这样配置

dubbo.registries.zk1.address=zookeeper://127.0.0.1:2181
dubbo.registries.zk2.address=disf://127.0.0.1:2182

这样配置dubbo的默认行为是双注册都消费

双注册不用说,就是会将服务注册到这两个注册中心上去,应用启动耗时增加

都消费指的是针对每个provider,consumer都会和它建立连接,消费时按注册中心顺序挑选一个可用的invoker进行调用,也就是说将两个注册中心中提供的服务merge起来进行调用。假设这两个注册中心提供了相同的服务,consumer会和每个provider建立2条长链接

设置默认消费注册中心怎么这么难?

接上条,如果消费了两个注册中心,两个注册中心都提供了相同的服务,我想设置个默认消费的注册中心怎么设置呢?一般是这么设置

dubbo.registries.zk1.default=true

但是经过实践你会发现,有可能不生效,追一下源码

可以看到当注册中心带了default是会被优先选中的,但为什么有时候这么配置又不行呢?

这是因为dubbo的版本问题,上图是2.7.3版本的代码,到2.7.5以后RegistryAwareClusterInvoker被换成了ZoneAwareClusterInvoker,看下这个类

default参数被换成了preferred,所以我们的配置需要改成

dubbo.registries.zookeeper.preferred=true

如果不放心,可以两个配置都加上,以防万一。


欢迎关注我的公众号

文章分享自微信公众号:
行百里er

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

原始发表时间:2021-05-08
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 几个你不知道的dubbo注册中心细节

    从源码上能看出,当address中包含://时就认为address配置的是一个URL,此时如果要配置backup地址必须在URL参数中指定backup参数才行;

    龟仙老人
  • Dubbo(二)—dubbo支持的协议和注册中心

    采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)

    全栈程序员站长
  • 服务框架之注册中心,你不知道的内幕

    前一篇服务框架技术栈粗略分析了服务框架需要的各个核心模块,首先提到的就是注册中心,注册中心实现了服务注册和发现的功能,在服务框架中也发挥着重要的作用。今天主要围...

    涤生
  • Dubbo 注册中心的工作流程是啥?

    在Dubbo 核心系统中,注册中心是其核心组件。Dubbo 通过注册中心实现了分布式环境中的**注册与发现。*

    王小明_HIT
  • Dubbo 的注册中心挂了可以继续通信吗?

    MQ、ES、Redis、Dubbo,上来先问你一些思考的问题,原理(kafka 高可用架构原理、es 分布式架构原理、redis 线程模型原理、Dubbo 工作...

    好好学java
  • Dubbo多注册中心和Zookeeper服务的迁移

    例如阿里有些服务来不及在青岛部署,只在杭州部署,而青岛的其它应用需要引用此服务,就可以将服务同时注册到两个注册中心。

    BUG弄潮儿
  • 德扑人机大战差点没搞成,这是几个你不知道的细节……

    唐旭 发自 海南 量子位 报道 | 公众号 QbitAI “德扑人机大战结束了,人类无悬念被AI吊打。” 这两天看了这么多媒体的新闻稿,大家对这场比赛的印象可能...

    量子位
  • 使用Nacos做为SpringCloud和Dubbo的共同注册中心

    【转载请注明出处】:https://cloud.tencent.com/developer/article/1643353

    后端老鸟
  • gRPC注册中心,常用的注册中心你懂了吗?AP还是CP

    gRPC是一个跨语言的微服务框架,但gRPC本身不支持微服务框架生态圈的一些功能,比如注册中心,限流,熔断等,今天我们就看看如何利用gRPC提供的接口实现简单的...

    阿伟
  • 你应该了解的Nacos注册中心

    前段时间有新闻报道,国外HashiCorp在官网宣布:不允许中国境内使用、部署和安装该企业旗下的企业版产品和软件。

    用户5397975
  • 关于Arrays你可能还不知道的细节

    Arrays 主要对数组提供了一些高效的操作,比如说排序、二分查找、填充、拷贝、相等判断,转化为list等等。我们选择部分看下,其他的可以看jdk中的Array...

    陈琛
  • 9. 细节见真章,Formatter注册中心的设计很讨巧

    Spring设计了org.springframework.format.Formatter格式化器接口抽象,对格式化器进行了大一统,让你只需要关心统一的API,...

    YourBatman
  • 9. 细节见真章,Formatter注册中心的设计很讨巧

    Spring设计了org.springframework.format.Formatter格式化器接口抽象,对格式化器进行了大一统,让你只需要关心统一的API,...

    YourBatman
  • 你所不知道的C#中的细节

    有一个东西叫做鸭子类型,所谓鸭子类型就是,只要一个东西表现得像鸭子那么就能推出这玩意就是鸭子。

    沙漠尽头的狼
  • 你所不知道的Spring的@Autowired实现细节

    相信很多Java开发都遇到过一个面试题:Resource和Autowired的区别是什么?这个问题的答案相信基本都清楚,但是这两者在Spring中是如何实现的呢...

    夜勿语
  • Dubbo Cluster集群那点你不知道的事。

    虽然关系不大,但是我还是想到了Dubbo的集群容错策略:Failover Cluster,即失败自动切换。

    why技术
  • 35个Java代码优化的细节,你知道几个?

    代码 优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的...

    程序员追风
  • Dubbo Cluster集群那点你不知道的事。

    虽然关系不大,但是我还是想到了Dubbo的集群容错策略:Failover Cluster,即失败自动切换。

    why技术
  • Dubbo分层架构之服务注册中心层的源码分析(上)

    手动配置会有很多问题,比如服务提供者挂了而服务消费者不知道,依旧调用。解决办法可以是在多次调用失败后将其剔除。但是服务提供者又重启恢复了呢,也可以解决,后台开一...

    Java艺术

扫码关注腾讯云开发者

领取腾讯云代金券