有时候我们需要的服务不在同一个 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. 怎样的 Hash 算法能对抗硬件破解

    前言 用过暴力破解工具 hashcat 的都知道,这款软件的强大之处在于它能充分利用 GPU 计算,比起 CPU 要快很多.所以在破解诸如 WiFi 握手包.数据库中的口令 Hash 值时,能大幅提高 ...

  2. 智能打印SDK-源码剖析

    开源地址:http://www.dnnode.com/ 软件下载地址:http://www.dnnode.com/在线展示:http://www.dnnode.com/help.html 前面的文章, ...

  3. 【Java基础】反射机制

    反射 反射可以使我们很方便的创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码链接.反射允许我们在编写和执行时,使我们的代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类 ...

  4. 微信公众平台开发-OAuth2.0网页授权(含源码)

    微信公众平台开发-OAuth2.0网页授权接口.网页授权接口详解(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 在微信开发的高级应用中,几乎都会使用到该接口,因为通过该接口,可以获 ...

  5. CORS(跨域资源共享)

    Cors(Cross-origin Resource Sharing)基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定响应成功与否. CORS与JSONP对比: 1.JSON ...

  6. JS邮箱验证-正则验证

    <form act="">输入:<input type="text" name="qc" id="qc" ...

  7. 8个超炫酷的jQuery相册插件欣赏

    在网页中,相册应用十分常见,如果你经常逛一些社交网站,那么你应该会注意到很多各式各样的网页相册应用.今天我们要来分享一些最新收集的jQuery相册插件,这些精美的jQuery相册插件可以帮助你快速搭建 ...

  8. wemall doraemon中Android app商城系统解决左侧抽屉菜单和viewpager不能兼容问题

    完美解决左侧抽屉菜单和viewpager不能兼容左右滑动的问题,可进行参考. WeMall-Client/res/layout/wemall_main_ui.xml </RadioGroup&g ...

  9. UI 事件处理

    一 > 事件的基本概念 事件概述 : UIEvent  ( [ɪ’vent]事件  )  事件,是由硬件捕捉的一个表示用户操作设备的对象 分三类 : 触摸事件 ,晃动事件 ,远程控制事件 触摸事 ...

  10. Vue学习之路---No.5(分享心得,欢迎批评指正)

    同样,首先我们还是回顾一下昨天讲到的东西: 1.常用的Vue修饰器 2.当利用js方法不修改数据,但也可以改变视图时,我们需要整体返回再整体接收 (如: items.example1 = items. ...