Dubbo多注册中心配置

摘要:
spring:profiles:active:service xxxprotocolName:importorg.springframework.boot.autoconfigure.condition.ConditionOnProperty;importorg.springframework.context.annotation.Bean;

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   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可支持灵活的注册中心配置。

免责声明:文章转载自《Dubbo多注册中心配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇发红包随机金额的两种方式npm版本号的了解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

seaJs学习笔记之javascript的依赖问题

之前分别为大家介绍了有关javascript中的冲突和性能问题,今天为大家介绍一下有关javascript中的依赖问题。我们将继续就之前javascript中性能问题继续介绍。 先来回顾一下性能问题的解决方法,那就是按需引入js文件。那么这样按需引入会不会存在问题呢?今天我们为大家继续揭晓答案。先看如下页面。 多文件HTML代码 <!doctype...

html/js部分问题和小结

2015/9/8 1.js中不要试图去处理由[变量:变量]组成的map(不过可以通过DWR.addOptions添加),而是处理[bh:变量][xm:变量],然后通过data[i].bh,data[i].xm进行处理 2.html&&js:  2.1 document.getElementsByTagName("input")  2.2...

webpack4与babel配合使es6代码可运行于低版本浏览器

使用es6+新语法编写代码,可是不能运行于低版本浏览器,需要将语法转换成es5的。那就借助babel7转换,再加上webpack打包,实现代码的转换。 转换包括两部分:语法和API let、const这些是新语法。 new promise()等这些是新API。 简单代码 类库 utils.js const name = 'weiqinl' let y...

Python--循环

__author__ = 'maioge'i = 1# while i <= 5 :# print('miaoge')# i += 1# while i <= 5 :# if i<=3 :# print('miaoge')# i+=1# continue# break# while i...

实现Cookie跨域共享

实现原理:cookie是不能跨域访问的,但是在二级域名是可以共享cookie的 概念说明:站点1=a.abc.com   站点2=b.abc.com 实现步骤:1. 配置两个站点的webconfig               2. a.abc.com写入cookie                3. b.abc.com读取cookie 一、配置Webc...

Asp.net2.0 VS 2005下的repeater控件本功能分页实例(共有 条记录 共有几页 当前第 页 首页,上一页,下一页,尾页 DropDownList跳转)

一、预览效果二、前台控件呈现部分 <asp:repeater id="LeaveMessage" runat="server" ><ItemTemplate><table width="100%" border="0" align="center" cellpadding="1" cellspacing="1" bgcolor=...