有时候咱们须要的服务不在同一个 zookeeper 注册中心上,此时咱们须要在 DUBBO 配置文件中配置多个注册中心。html
下面咱们在以前建立项目的基础上在 provider 模块中增长一个 IBookService 接口,将其注册在 localhost 上端口号为 2182 的 zookeeper 注册中心,来模拟多注册中心的配置。最后在 consumer 模块中调用该接口,验证多注册中心配置是否成功。spring
IBookService 服务将绑定在地址为 localhost,端口号为 2182 的 zookeeper 注册中心。咱们先建立接口,放在 interface 模块中:app
package com.chanshuyi.service; /** * Created by Administrator on 2016/1/22. */ public interface IBookService { /** * 获取图书价格 * @param bookNo 图书编号 * @return */ public double getPrice(int bookNo); }
在 provider 模块中实现该接口:ide
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 类:ui
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 配置文件中配置多注册中心。spa
打开 provider 模块的 spring-provider.xml 配置文件,修改为以下:3d
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>
第 1三、14 行分别声明了一个 id 为 “dubbodemo”、“dubbodemo_copy”的注册中心,分别对应本地机器的 2181 和 2182 端口。code
第 18 行暴漏了 IUserService 接口并显式指定将其注册到 dubbodemo 注册中心。xml
第 19 行暴漏了 IBookService 接口并显示指定将其注册到 dubbodemo_copy 注册中心。htm
若是在暴漏接口的时候没有指定注册到哪一个注册中心,那么它会默认注册到全部的注册中心。
到这里,配置完成。下面将模拟多个注册中心,并启动服务。
咱们经过修改 zookeeper 端口号的方式,在本机上启动两个 zookeeper 注册中心,分别占用 218一、2182 端口(修改 conf/zoo.cfg 文件的 clientPort 属性)。
以后咱们运行 bin/zkServer.cmd 启动 zookeeper,启动后以下图所示:
此时 zookeeper 正在等待 provider 或 consumer 端的链接。
咱们运行 provider 模块的 Launch.main() 方法,启动服务。以后运行 consumer 模块的 UserServiceConsumer.main() 方法,能够看到 provider 模块成功接收到了 consumer 模块的接口请求:
本文就到这里结束了。有什么疑问请评论留言。
参考资料: