apache / dubbo-spring-boot-project

Spring Boot Project for Apache Dubbo
https://dubbo.apache.org
Apache License 2.0
5.41k stars 1.88k forks source link

apache dubbo-spring-boot-starter 多个注册中心配置不生效?具体该怎么配置呢? #535

Closed ck-jesse closed 4 years ago

ck-jesse commented 5 years ago

具体配置如下(该多注册中心配置不生效):

dubbo:
    application:
        name: psp-service
    protocol:
        name: dubbo
        port: 20882
    scan:
        base-packages: com.psp.service.facade.impl
    config:
      multiple: true
    registrys:
      reg1:
          address: zookeeper://127.0.0.1:2181
      reg2:
          address: zookeeper://127.0.0.1:2182
          default: true

建议在官方demo工厂中给出具体的多注册中心配置样例!!!

ck-jesse commented 5 years ago

好吧,该问题已解决。有点小坑(⊙o⊙)… 处理:将前缀 registrys 修改为 registries 即可。 分析:原本基于apache dubbo-spring-boot-starter模块的源码去找到的DubboConfigurationProperties中的registrys 字段,所以假想着多注册中心配置(上面失效的配置)是可行的,结果并调试了好多圈,死活不生效。 实在没办法就去研究dubbo本身的多注册中心配置,然后尝试着配置 dubbo.registries属性结果竟然成功了。dubbo.registries是通过DubboConfigBindingBeanPostProcessor来对注册中心进行配置初始化的。

rutine commented 5 years ago

好吧,该问题已解决。有点小坑(⊙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前缀从属性源文件取值. 两边不一致造成一种假象,容易出错. 应该是设计上的缺陷.

这种写法是通过构造器创建RegistryConfig对象, 把registrys -> registies还是死活报错

mercyblitz commented 4 years ago

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.