zoukankan      html  css  js  c++  java
  • Dubbo多注册中心配置

    Dubbo常用的注册中心有Zookeeper、Nacos、Redis,目前项目中使用Zookeeper作为注册中心。
    service-xxx-dubbo.xml配置如下:

    <dubbo:application name="${dubbo.applicationName}" />
    <dubbo:registry protocol="${dubbo.registryProtocol}" address="${dubbo.registryAddress}" port="${dubbo.registryPort}" register="${dubbo.register}" />
    <dubbo:protocol name="${dubbo.protocolName}" port="${dubbo.protocolPort}" threadpool="${dubbo.protocolThreadpool}" threads="${dubbo.protocolThreads}" />
    <dubbo:provider delay="-1" retries="0" />
    <dubbo:consumer timeout="${dubbo.consumerTimeout}" retries="${dubbo.consumerRetries}" check="${dubbo.consumerCheck}" />
    <dubbo:service ref="xxxService" interface="com.biz.XxxService" />
    ...
    

    这里用占位符配置,便于区分开发、测试、线上不同的环境,通过springboot的不同环境yml可配置。
    指定使用本地开发环境配置:

    spring:
      profiles:
        active: local
    

    本地配置如下:

    dubbo:
      applicationName: service-xxx
      protocolName: dubbo
      protocolPort: 20001
      protocolThreadpool: fixed
      protocolThreads: 500
      registryProtocol: zookeeper
      registryAddress: 192.168.x.x
      registryPort: 2181
      register: false
      consumerTimeout: 5000
      consumerRetries: 0
      consumerCheck: false
    

    在实际项目中,可能有多个测试环境,有的时候某个服务可能只想部署一个,但希望在多个环境都使用它。
    比如某个基础服务各测试环境通用,或者某个迭代不频繁的项目为了节约资源只希望部署一个公用。
    这时可使用Dubbo支持的多注册中心配置,例如在xml配置多个<dubbo:registry>
    为了开发、线上版本仅使用一个配置中心,即xml里仅配置一个<dubbo:registry>
    这里通过Spring的Bean来配置多个中心,并且仅在测试环境生效。

    package cn.wine.ms.search.support.dubbo.config;
    
    import com.alibaba.dubbo.config.RegistryConfig;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 测试环境dubbo配置,同时注册到测试环境2,测试环境3的zookeeper
     * 测试环境1的zookeeper在service-xxx-dubbo.xml配置
     *
     * @author cdfive
     */
    @ConditionalOnProperty(value = "spring.profiles.active", havingValue = "test")
    @Configuration
    public class DubboConfig {
    
        /**
         * 测试环境2的zookeeper配置
         */
        @Bean
        public RegistryConfig registryConfigTest2() {
            RegistryConfig registryConfig = new RegistryConfig();
            registryConfig.setProtocol("zookeeper");
            registryConfig.setAddress("192.168.0.2");
            registryConfig.setPort(2181);
            return registryConfig;
        }
    
        /**
         * 测试环境3的zookeeper配置
         */
        @Bean
        public RegistryConfig registryConfigTest3() {
            RegistryConfig registryConfig = new RegistryConfig();
            registryConfig.setProtocol("zookeeper");
            registryConfig.setAddress("192.168.0.3");
            registryConfig.setPort(2181);
            return registryConfig;
        }
    }
    

    这里使用了Dubbo的RegistryConfig类,并配合@ConditionalOnProperty(value = "spring.profiles.active", havingValue = "test")注解,
    仅测试环境生效。因为本地开发和线上环境不需要。

    这样配置后,本应用的Dubbo的提供者和消费者都注册到了多个zookeeper上。
    有的时候还可能只想提供方注册到多个zookeeper上,但消费方仅使用单个环境,即消费单个zookeeper的接口。
    这时可以给registry设置id编号,并且给<dubbo:consumer>指定注册中心的id。
    修改service-xxx-dubbo.xml

    <dubbo:application name="${dubbo.applicationName}" />
    <dubbo:registry id="mainRegistry" protocol="${dubbo.registryProtocol}" address="${dubbo.registryAddress}" port="${dubbo.registryPort}" register="${dubbo.register}" />
    <dubbo:protocol name="${dubbo.protocolName}" port="${dubbo.protocolPort}" threadpool="${dubbo.protocolThreadpool}" threads="${dubbo.protocolThreads}" />
    <dubbo:provider delay="-1" retries="0" />
    <dubbo:consumer timeout="${dubbo.consumerTimeout}" retries="${dubbo.consumerRetries}" check="${dubbo.consumerCheck}" registry="mainRegistry"/>
    <dubbo:service ref="xxxService" interface="com.biz.XxxService" />
    ...
    

    其中,mainRegistry为要单独使用的注册中心的编码。
    可见,结合xml和注解配置,Dubbo可支持灵活的注册中心配置。

  • 相关阅读:
    康威定律和系统设计——《微服务设计》读书笔记
    安全——《微服务设计》读书笔记
    监控——《微服务设计》读书笔记
    测试——《微服务设计》读书笔记
    [转]Linux 系统挂载数据盘
    部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记
    拆分:分解单块系统——《微服务设计》读书笔记
    Unused Method(不再使用的方法)——Dead Code(死亡代码)
    使用Fortify进行代码静态分析(系列文章)
    NEUACM1132: Renew MST Quickly 增量最小生成树
  • 原文地址:https://www.cnblogs.com/cdfive2018/p/14061800.html
Copyright © 2011-2022 走看看