javaConfig的方式配置dubbo多注册中心

应用背景

由于项目采用分布式集群部署架构,现有需求场景如下:
1.在某一模块项目下用dubbo调用其他 zookeeper 注册中心内已注册好的服务,因此在项目启动时应配置两个甚至多个注册中心来进行服务调用。
2.项目在开发环境中开发人员可以自定义指定服务从哪个注册中心中调用服务。

创建DubboConfig

// 提供方应用信息,用于计算依赖关系,name必须唯一
 @Bean
    public ApplicationConfig application() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
		// telnet 命令
        applicationConfig.setQosPort(PropertiesUtil.getInt("protocol.port", 22222) + 10);
        applicationConfig.setName(PropertiesUtil.getString("registry.name"));
        applicationConfig.setLogger("slf4j");
        return applicationConfig;
    }
    //配置第一个注册中心
     @Bean
    public RegistryConfig registry() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress(PropertiesUtil.getString("address"));
        registryConfig.setProtocol(PropertiesUtil.getString("registry"));
        registryConfig.setFile(PropertiesUtil.getString("cache.dir") + "/dubbo-"
                + PropertiesUtil.getString("registry.name") + ".cache");
        return registryConfig;
    }
    //配置第二个注册中心
     @Bean
    public RegistryConfig newregistry() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress(PropertiesUtil.getString("address2"));
        registryConfig.setProtocol(PropertiesUtil.getString("registry"));
        registryConfig.setFile(PropertiesUtil.getString("cache.dir") + "/dubbo-"
                + PropertiesUtil.getString("registry.name") + ".cache");
        //设置非默认注册中心
        registryConfig.setDefault(false);
        return registryConfig;
    }

ConsumerConfig(服务消费方配置)

@Configuration
	static class ConsumerConfig extends DubboConfig {
		@Bean
		public ConsumerConfig consumer() {
			ConsumerConfig consumerConfig = new ConsumerConfig();
			//设置负载均衡策略
			consumerConfig.setLoadbalance("leastactive");
			List<RegistryConfig> registryConfigs = new ArrayList<>(2);   
			//第一个(默认)
			registryConfigs.add(registry());
			//第二个
			registryConfigs.add(newregistry());
			//添加多个配置中心
			consumerConfig.setRegistries(registryConfigs);
			consumerConfig.setTimeout(PropertiesUtil.getInt("request.timeout", 20000));
			consumerConfig.setRetries(PropertiesUtil.getInt("consumer.retries", 0));
			consumerConfig.setCheck(false);
			return consumerConfig;
		}
	}

Service接口配置

//方式一(注解方式)
//如果不在DubboConfig类中的@Bean加载配置中心时定义beanName,则默认使用该方法名称,否则使用指定的beanName进行注册,即registry值
@Reference(registry="newregistry")
private StudentService studentService;
//方式二(xml配置文件方式)
<dubbo:reference id="studentService" interface="org.liu.service.StudentService " registry="newregistry"
		check="false" />
//service接口
@Autowired
private StudentService studentService;
//方式三(@Reference方式)
//使用该方式可以省略DubboConfig、ConsumerConfig两个文件的配置,直接调用远程服务注入远程服务对象,前提是需要知道被调用服务的详细地址和端口号
@Reference(url = "dubbo://192.168.49.121:18081")
private StudentService studentService;


完成以上配置后就可以从一个项目中同时调用两个 zookeeper服务注册中心中的服务实现远程方法调用,也可以进行自定义registry值来选择调用调用哪个配置中心里的服务。

参考资料
http://dubbo.apache.org/en-us/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值