Closed ck-jesse closed 4 years ago
好吧,该问题已解决。有点小坑(⊙o⊙)… 处理:将前缀 registrys 修改为 registries 即可。 分析:原本基于apache dubbo-spring-boot-starter模块的源码去找到的DubboConfigurationProperties中的registrys 字段,所以假想着多注册中心配置(上面失效的配置)是可行的,结果并调试了好多圈,死活不生效。 实在没办法就去研究dubbo本身的多注册中心配置,然后尝试着配置 dubbo.registries属性结果竟然成功了。dubbo.registries是通过DubboConfigBindingBeanPostProcessor来对注册中心进行配置初始化的。
好吧,该问题已解决。有点小坑(⊙o⊙)… 处理:将前缀 registrys 修改为 registries 即可。 分析:原本基于apache dubbo-spring-boot-starter模块的源码去找到的DubboConfigurationProperties中的registrys 字段,所以假想着多注册中心配置(上面失效的配置)是可行的,结果并调试了好多圈,死活不生效。 实在没办法就去研究dubbo本身的多注册中心配置,然后尝试着配置 dubbo.registries属性结果竟然成功了。dubbo.registries是通过DubboConfigBindingBeanPostProcessor来对注册中心进行配置初始化的。
确实是个坑,正常理解应通过DubboConfigurationProperties
属性绑定对象获取属性值。但具体实现确实是先注册一系列的AbstranctConfig
Bean
定义,实例化这些Bean时由DubboConfigBindingBeanPostProcessor
后置处理器从属性文件拿到对应的值赋值, 压根没从属性绑定对象取值,属性绑定对象定义的属性名是: registrys
, 而DubboConfigBindingBeanPostProcessor
后置处理器是根据dubbo.registries
前缀从属性源文件取值. 两边不一致造成一种假象,容易出错. 应该是设计上的缺陷.
dubbo:
registrys:
zk1: zookeeper://localhost:2181
zk2: zookeeper://localhost:2182
zk3: zookeeper://localhost:2183
这种写法是通过构造器创建RegistryConfig
对象, 把registrys -> registies
还是死活报错
dubbo:
registries:
zk1:
address: zookeeper://localhost:2181
zk2:
address: zookeeper://localhost:2182
zk3:
address: zookeeper://localhost:2183
因为DubboConfigBindingBeanPostProcessor
后置处理器是通过属性设置的, 所以必须存在属性名
I think you, two guys, make some mistakes :
First, In English, the word registrys
is not a valid plural noun, the correct word is "registries".
Second, The class DubboConfigBindingBeanPostProcessor
does not bind the prefix "registrys" or "registries" rather than a variable that was injected from the constructor.
具体配置如下(该多注册中心配置不生效):
建议在官方demo工厂中给出具体的多注册中心配置样例!!!