DUBBO高级配置:多注册中心配置

有时候我们需要的服务不在同一个 zookeeper 注册中心上,此时我们需要在 DUBBO 配置文件中配置多个注册中心。

下面我们在之前创建项目的基础上在 provider 模块中增加一个 IBookService 接口,将其注册在 localhost 上端口号为 2182 的 zookeeper 注册中心,来模拟多注册中心的配置。最后在 consumer 模块中调用该接口,验证多注册中心配置是否成功。

增加 IBookService 接口

IBookService 服务将绑定在地址为 localhost,端口号为 2182 的 zookeeper 注册中心。我们先创建接口,放在 interface 模块中:

package com.chanshuyi.service;

/**
 * Created by Administrator on 2016/1/22.
 */
public interface IBookService {

    /**
     * 获取图书价格
     * @param bookNo 图书编号
     * @return
     */
    public double getPrice(int bookNo);
}

在 provider 模块中实现该接口:

package com.chanshuyi.service.impl;
import com.chanshuyi.service.IBookService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

/**
 * Created by Administrator on 2016/1/22.
 */
@Service("bookService")
public class BookServiceImpl implements IBookService {

    private Logger logger = LoggerFactory.getLogger(BookServiceImpl.class);

    @Override
    public double getPrice(int bookNo) {
        logger.info("执行getPrice()方法");
        return 11.11;
    }
}

之后我们在 consumer 模块的 UserServiceConsumer.main() 方法里增加对 IBookService.getPrice() 接口的调用。修改后的 UserServiceConsumer 类:

package com.chanshuyi;

import com.chanshuyi.service.IBookService;
import com.chanshuyi.service.IUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

/**
 * Created by chanshuyi on 2016/1/19.
 */
public class UserServiceConsumer {

    private static Logger logger = LoggerFactory.getLogger(UserServiceConsumer.class);

    public static void main(String args[]) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        IUserService userService = (IUserService) ctx.getBean("userService");
        logger.info("执行结果:" + userService.login("hello", "hello"));
        IBookService bookService = (IBookService) ctx.getBean("bookService");
        logger.info("执行结果:" + bookService.getPrice(12));
    }
}

到这里,新接口的开发结束。下面在DUBBO 配置文件中配置多注册中心。

配置多注册中心

打开 provider 模块的 spring-provider.xml 配置文件,修改成如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!-- 添加 DUBBO SCHEMA -->
 3 <beans xmlns="http://www.springframework.org/schema/beans"
 4        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans
 7         http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo
 8         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
 9 
10     <!-- 应用名 -->
11     <dubbo:application name="dubbodemo-provider"/>
12     <!-- 连接到哪个本地注册中心 -->
13     <dubbo:registry id="dubbodemo" address="zookeeper://localhost:2181"/>
14     <dubbo:registry id="dubbodemo_copy" address="zookeeper://localhost:2182"/>
15     <!-- 用dubbo协议在20880端口暴露服务 -->
16     <dubbo:protocol name="dubbo" port="28080"/>
17     <!-- 声明需要暴露的服务接口 -->
18     <dubbo:service registry="dubbodemo" timeout="3000" interface="com.chanshuyi.service.IUserService" ref="userService"/>
19     <dubbo:service registry="dubbodemo_copy" timeout="3000" interface="com.chanshuyi.service.IBookService" ref="bookService"/>
20 </beans>

第 13、14 行分别声明了一个 id 为 “dubbodemo”、“dubbodemo_copy”的注册中心,分别对应本地机器的 2181 和 2182 端口。

第 18 行暴漏了 IUserService 接口并显式指定将其注册到 dubbodemo 注册中心。

第 19 行暴漏了 IBookService 接口并显示指定将其注册到 dubbodemo_copy 注册中心。

如果在暴漏接口的时候没有指定注册到哪个注册中心,那么它会默认注册到所有的注册中心。

到这里,配置完成。下面将模拟多个注册中心,并启动服务。

模拟多个注册中心

我们通过修改 zookeeper 端口号的方式,在本机上启动两个 zookeeper 注册中心,分别占用 2181、2182 端口(修改 conf/zoo.cfg 文件的 clientPort 属性)。

之后我们运行 bin/zkServer.cmd 启动 zookeeper,启动后如下图所示:

此时 zookeeper 正在等待 provider 或 consumer 端的连接。

我们运行 provider 模块的 Launch.main() 方法,启动服务。之后运行 consumer 模块的 UserServiceConsumer.main() 方法,可以看到 provider 模块成功接收到了 consumer 模块的接口请求:

本文就到这里结束了。有什么疑问请评论留言。

参考资料:

1. http://dubbo.io/

2. DUBBO 官方配置参考手册

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 14.04上安装Solr 5.2.1

Solr是一个基于Apache Lucene的搜索引擎平台。它是用Java编写的,并使用Lucene库来实现索引。可以使用各种REST API访问它,包括XML...

19360
来自专栏猿天地

Spring Boot中整合Sharding-JDBC读写分离示例

在我《Spring Cloud微服务-全栈技术与案例解析》书中,第18章节分库分表解决方案里有对Sharding-JDBC的使用进行详细的讲解。

43330
来自专栏PPV课数据科学社区

【聚焦】企业数据收集网页采集解决方案 附PDF下载

原文:http://www.ppvke.com/Answer/file/download/file_name-5LyB5Lia5pWw5o2u5pS26ZuG6...

38050
来自专栏Hongten

hadoop2-elasticsearch的安装

18020
来自专栏Java技术分享

持久化persistence.xml配置文件

 在EJB中,一个实体Bean应用由实体类和persistence.xml文件文件组成。persistence.xml文件在jar文件的META-INF目录下...

25480
来自专栏mwangblog

Shell中的命令别名、命令历史和命令替换

14640
来自专栏编程坑太多

python多版本共存最好的解决方案-虚拟环境

19140
来自专栏Java技术栈

SpringCloud动态刷新配置信息

有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢? 添加依赖 <dependencies> ... <depende...

31350
来自专栏Java成长之路

IntelliJ IDEA如何导入Gradle项目

最近学习Gradle,本文来重点介绍一下,如何使用IntelliJ IDEA导入`Gradle项目的一种方法。

69840
来自专栏用户2442861的专栏

MyBatis学习总结(三)——优化MyBatis配置文件中的配置

  之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下:

12310

扫码关注云+社区

领取腾讯云代金券