几个你不知道的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
如果不放心,可以两个配置都加上,以防万一。
关于作者:专注后端的中间件开发,公众号"捉虫大师"作者,关注我,给你最纯粹的技术干货
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述