如何在MSE上为Dubbo应用构建服务注册中心

本文以包含服务提供者和服务消费者的Dubbo微服务应用为例,让您快速体验如何在MSE上构建ZooKeeper、Eureka和Nacos等服务注册中心,实现应用的服务注册与发现,以及消费者对提供者的调用。

准备工作

在开始开发前,请确保您已经完成以下工作:

创建服务提供者

在本地创建一个提供者应用工程,添加依赖,配置服务注册与发现,并将注册中心指定为Nacos。

  1. 创建Maven项目并引入依赖。

    1. 使用IDE(如IntelliJ IDEA或Eclipse)创建一个Maven项目。

    2. pom.xml文件中添加dubbo和nacos-client依赖。

      <dependencies>
          <dependency>
              <groupId>org.apache.dubbo</groupId>
              <artifactId>dubbo</artifactId>
              <version>2.7.9</version>
          </dependency>
          <dependency>
              <groupId>com.alibaba.nacos</groupId>
              <artifactId>nacos-client</artifactId>
              <version>1.4.2</version>
          </dependency>
      </dependencies>            
  2. 开发Dubbo服务提供者。

    Dubbo中服务都是以接口的形式提供的。

    1. 在src/main/java工程路径下创建一个package,命名为com.alibaba.mse。

    2. 在com.alibaba.mse下创建一个接口(interface)IHelloService,里面包含一个SayHello方法。

      package com.alibaba.mse;
      
      public interface IHelloService {
         String sayHello(String str);
      }                                
    3. 在com.alibaba.mse下创建一个类IHelloServiceImpl,实现此接口。

      package com.alibaba.mse;
      
      public class IHelloServiceImpl implements IHelloService {
      public String sayHello(String str) {
          return "hello " + str;
          }
      }                          
  3. 配置Dubbo服务。

    1. 在src/main/resources路径下创建provider.xml文件并打开。

    2. provider.xml中,添加Spring相关的XML Namespace(xmlns)和XML Schema Instance(xmlns:xsi),以及Dubbo相关的Namespace(xmlns:dubbo)和Schema Instance(xsi:schemaLocation)。

      <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
      xmlns="http://www.springframework.org/schema/beans"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
      http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">                   
    3. provider.xml中将接口和实现类暴露成Dubbo服务。

      <dubbo:application name="demo-provider"/>
      
      <dubbo:protocol name="dubbo" port="28082"/>
      
      <dubbo:service interface="com.alibaba.mse.IHelloService" ref="helloService"/>
      
      <bean id="helloService" class="com.alibaba.mse.IHelloServiceImpl"/>                                
    4. provider.xml中将注册中心指定为本地启动的Nacos Server。

      <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" />                                
      说明

      若您选择使用公网域名,请清空白名单。相关操作,请参见设置白名单

      在实例列表的访问方式列,查看在MSE上传创建的Nacos的外网访问地址,格式为mse.XX.nacos.mse.aliyuncs.com

      说明

      如果您使用的服务注册中心是MSE的Zookeeper,那么您需要将本步骤的注册中心代码换成Zookeeper相应的代码,具体代码详情请参见微服务注册配置中心使用说明

  4. 启动服务。

    1. 在com.alibaba.mse中创建类Provider,并按下面的代码在Provider的main函数中加载Spring Context,将配置好的Dubbo服务暴露。

      package com.alibaba.mse;
      
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      public class Provider {
          public static void main(String[] args) throws Exception {
              ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"});
              context.start();
              System.in.read();
          }
      }                
    2. 执行Provider的main函数,启动服务。

  5. 验证结果。

    1. 登录MSE注册中心控制台

    2. 在左侧导航栏,选择注册配置中心 > 实例列表,并在实例列表页单击已创建的MSE实例。

    3. 设置MSE引擎访问白名单。

      如果没有填写任何IP地址及掩码,表示允许所有地址均可访问该实例。本文以无白名单为例。

    4. 在实例详情页面的左侧导航栏,选择服务管理 > 服务列表,在服务列表中,如果存在Provider服务,表示该服务注册成功。

创建服务消费者

在本地创建一个消费者应用工程,添加依赖,添加订阅服务的配置。

创建Maven项目并引入依赖。

  1. 使用IDE(如IntelliJ IDEA或Eclipse)创建一个Maven项目。

  2. pom.xml文件中添加dubbo和nacos-client依赖。

    <dependencies>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.4.2</version>
        </dependency>
    </dependencies>            

结果验证

执行curl http://localhost:8080/sayHello/mse,如果结果返回Hello, mse,表示Consumer与Provider业务调用成功。

`curl http://localhost:8080/sayHello/mse`

`Hello, mse`