有时候我们需要的服务不在同一个 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 配置文件,修改成如下:

 <?xml version="1.0" encoding="UTF-8"?>
<!-- 添加 DUBBO SCHEMA -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 应用名 -->
<dubbo:application name="dubbodemo-provider"/>
<!-- 连接到哪个本地注册中心 -->
<dubbo:registry id="dubbodemo" address="zookeeper://localhost:2181"/>
<dubbo:registry id="dubbodemo_copy" address="zookeeper://localhost:2182"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="28080"/>
<!-- 声明需要暴露的服务接口 -->
<dubbo:service registry="dubbodemo" timeout="3000" interface="com.chanshuyi.service.IUserService" ref="userService"/>
<dubbo:service registry="dubbodemo_copy" timeout="3000" interface="com.chanshuyi.service.IBookService" ref="bookService"/>
</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 官方配置参考手册

DUBBO高级配置:多注册中心配置的更多相关文章

  1. 小D课堂 - 新版本微服务springcloud+Docker教程_3-07 Eureka服务注册中心配置控制台问题处理

    笔记 7.Eureka服务注册中心配置控制台问题处理     简介:讲解服务注册中心管理后台,(后续还会细讲) 问题:eureka管理后台出现一串红色字体:是警告,说明有服务上线率低 EMERGENC ...

  2. Dubbo+ZK与Eureka注册中心比较

    Eureka可以很好的应对网络故障导致部分节点失去联系的情况,而不会像zk那样因为选举导致整个集群不可用 dubbo + zk 当向注册中心查询服务注册列表时,可以容忍注册中心返回的是几分钟以前的注册 ...

  3. linux下配置zookeeper注册中心及运行dubbo服务

    dubbo和zookeeper的关系 简单来说打个比方:dubbo就是动物园的动物,zookeeper是动物园.如果游客想看动物的话那么就去动物园看.比如你要看老虎,那么动物园有你才能看到.换句话说我 ...

  4. nacos注册中心配置命名服务不生效问题

    nacos作为注册中心指定命名空间,配置如下: 但是启动之后发现服务都默认注册到了public这个命名空间下面,也就是指定的命名空间不生效 这是因为注册中心使用的命名空间的配置不是nacos.conf ...

  5. SpringCloud实践引入注册中心+配置中心

    随着服务数量的增多,尤其是多数项目涉及jni本地方法的调用,所需参数配置较多,同时内存溢出等维护问题时常发生.鉴于此,原tomcat集群的使用已难满足需求,而微服务的思想契合当前项目实践,特在服务端构 ...

  6. SpringCloud-Alibaba-Nacos 服务注册中心&配置中心

    Spring Cloud Alibaba 由于 Spring Cloud Netflix 项目进入维护模式(将模块置于维护模式意味着 Spring Cloud 团队将不会再向模块中添加新功能,只会修复 ...

  7. 一文快速上手 Nacos 注册中心+配置中心!

    Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录.而 Nacos 作为 Spring Cloud Alibaba 的核心 ...

  8. 微服务化的大坑之一:当dubbo神器碰上共用注册中心和错误的暴露接口

    dubbo是国内用比较多的微服务化系统,非侵入(意思就是说不用自己写代码,把xml配置好就可以用了,这个xml的引用注解就注在springboot的开启main类里面就可以了),提供好用的均衡和容错机 ...

  9. 使用dubbo中间件的zookeeper注册中心时报错

    在项目中搭建soa项目时,使用dubbo服务中间件时需要在虚拟机中创建一个zookeeper注册中心,在配置都没有问题的时候,如果服务端启动成功,但是消费端启动报错并且看不出据地位置时,一定要注意你的 ...

随机推荐

  1. java集合框架04——LinkedList和源码分析

    上一章学习了ArrayList,并分析了其源码,这一章我们将对LinkedList的具体实现进行详细的学习.依然遵循上一章的步骤,先对LinkedList有个整体的认识,然后学习它的源码,深入剖析Li ...

  2. 阿里巴巴Java开发手册评述

    2016年底的时候阿里巴巴公开了其在内部使用的Java编程规范.随后进行了几次版本修订,目前的版本为v1.0.2版.下载地址可以在其官方社区-云栖社区https://yq.aliyun.com/art ...

  3. Ceph部署(二)RGW搭建

    背景 Ceph RGW简介 Ceph RGW基于librados,是为应用提供RESTful类型的对象存储接口.RGW提供两种类型的接口: 1) S3:兼容Amazon S3RESTful API: ...

  4. 编程思想之——"人是活的,程序是死的"

    "人是活的,程序是死的"这句话我时常提起,可能很多人不是很理解我为什么会这样说,下面我就简单来谈谈我对这句话的理解. 1.不要因为技术而技术,技术选型的初衷是需求. 现在很多人在做 ...

  5. SQL SERVER的统计信息

    1 什么是统计信息     统计信息 描述了 表格或者索引视图中的某些列的值 的分布情况,属于数据库对象.根据统计信息,查询优化器就能评估查询过程中需要读取的行数及结果集情况,同时也能创建高质量的查询 ...

  6. Java对象序列化的使用和定制

    序列化的概念及使用场合 序列化就是把对象转化为字节序列并持久化保存,可以保存在内存中.磁盘文件系统,甚至通过网络传递,并能够在以后将这个字节序列完全恢复为原来的对象. 对象序列化的概念引入Java是为 ...

  7. Codeblocks快捷键

    Codeblocks快捷键: Ctrl+Shift+Enter:复制控制台exe内容 Ctrl+Z:撤销 Ctrl+F:查找  Ctrl+R:查找替换功能 Ctrl+Shift+C:加注释     C ...

  8. 数据库 t-sql 语句

    sql 高级语句  在基础语句上加上条件 条件修改: update 表名set 列明=要修改的值  where 列名 =原来的值 条件删除    删除  这个值的的一行 delete from 表名 ...

  9. koahub.js 0.09 发布,新增钩子机制

    koahubjs发布0.09 新增钩子机制添加钩子机制,控制器钩子和函数钩子修复自动加载bug,实现除自动加载导出的default外,还能自动加载其他的方法记koahubjs钩子开发过程在使用koah ...

  10. ST 单元测试之maven引入junit包

    按照上篇博客,已经完成了mavne以及eclipse的安装配置,新建好了一个maven项目. 接下来打开项目,双击打开pom.xml,可以看到如下所示, 点击下方的pom.xml,然后添加如下代码,即 ...