dubbo 多注册中心的使用
工作中,总会遇到 dubbo 跨机房调用的场景,特此记录如下,跨机房调用需要配置多个集群,然后在 DubboReference 中指定。
这串代码配置了两个注册中心,命名空间分别为:test、develop,其中 test 为默认的注册中心,若无特别配置,将向默认注册中心注册、订阅,除非显式指定。
这串代码指定从 dev 这个注册中心订阅,需要注意的是,injvm 默认为 true,如需跨机房调用自身提供的服务,那么 injvm 必须要设置为 false
dubbo.registry.subscribe 和 dubbo.registry.register 也可以控制是否订阅和注册,但是该优先级要高于 default,如果指定了 dubbo.registries.dev.subscribe=false 然后你从 dev 订阅,则抛错:No such any registry to reference xxx,如果指定了 dubbo.registries.dev.default=false ,则默认不向 dev 注册,默认不向 dev 订阅,如果你指定了从 dev 订阅也能生效。
总结下:dubbo.registry.subscribe 和 dubbo.registry.register 是控制是否向该集群订阅或注册,一般不会两者同时设置为 false;dubbo.registry.default 是设置该集群是否为默认集群,dubbo 默认向默认集群注册和订阅。
细心的你,可能发现,我时而 dubbo.registries.dev.subscribe=false 时而 dubbo.registry.subscribe ,其实并非笔误,dubbo.registries.dev 中,dev 是集群名称,也是集群默认的 id,集群 id 也可以显式指定:dubbo.registries.dev.id=dev,如果没指定,则默认取集群名称,dubbo.registries.xxx 和 dubbo.registry 都是 registry 的配置,可选项一样,dubbo.registries 对应:Map<String, RegistryConfig>,dubbo.registry 是 RegistryConfig