zoukankan      html  css  js  c++  java
  • 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 官方配置参考手册

  • 相关阅读:
    关于防盗链
    原生php登陆注册
    thinkPHP的D方法和M方法用法和区别
    Python中类与对象的关系
    解决_CRT_SECURE_NO_WARNINGS 警告
    骨头汤、豆浆、海带都不能补钙,最补钙的食物是它
    蘑菇鸡蛋汤
    CString和string在unicode与非unicode下的相互转换(转)
    【CString与string转换】不存在从 "LPWSTR" 转换到 "std::basic_string<char, std::char_traits<char>, std::allocator(转)
    LINK : fatal error LNK1104: 无法打开文件“mfc71.lib”(转)
  • 原文地址:https://www.cnblogs.com/chanshuyi/p/5144563.html
Copyright © 2011-2022 走看看