You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by "rutine (GitHub)" <gi...@apache.org> on 2019/09/26 06:19:14 UTC

[GitHub] [dubbo-spring-boot-project] rutine commented on issue #535: apache dubbo-spring-boot-starter 多个注册中心配置不生效?具体该怎么配置呢?

> 
> 
> 好吧,该问题已解决。有点小坑(⊙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还是死活报错
> 最后写成这种写法就OK:
```
dubbo:
  registries:
    zk1:
      address: zookeeper://localhost:2181
    zk2:
      address: zookeeper://localhost:2182
    zk3:
      address: zookeeper://localhost:2183
```
因为DubboConfigBindingBeanPostProcessor后置处理器是通过属性设置的, 所以必须存在属性名

[ Full content available at: https://github.com/apache/dubbo-spring-boot-project/issues/535 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org