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

准备工作

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

在 MSE 上创建服务注册中心

本文以在 MSE 构建 Nacos 为例。

说明
  1. 登录 MSE 控制台
  2. 实例列表左上角单击创建实例
  3. 创建实例对话框设置实例参数,并单击创建
    MSE创建Nacos实例
    • 地域:选择华东1(杭州)
    • 引擎类型:选择 Nacos
    • 版本:选择 1.1.3
    • 网络类型:选择公网实例
    • 规格:选择 1核 2G(磁盘60)× 3节点
    创建完成后,如果所创建的 Nacos 状态为运行中,表示 Nacos 创建完成。在MSE创建Nacos完成

    其中访问列对应的mse.XX.nacos.mse.aliyuncs.com为 Nacos 访问地址。

创建服务提供者

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

  1. 创建 Maven 项目并引入依赖。
    1. 使用 IDE(如 IntelliJ IDEA 或 Eclipse)创建一个 Maven 项目。
    2. pom.xml文件中添加 dubbo、dubbo-registry-nacos 和 nacos-client 依赖。
      <dependencies>
      
          <dependency>
              <groupId>org.apache.dubbo</groupId>
              <artifactId>dubbo</artifactId>
              <version>2.7.3</version>
          </dependency>
      
          <dependency>
              <groupId>org.apache.dubbo</groupId>
              <artifactId>dubbo-registry-nacos</artifactId>
              <version>2.7.3</version>
          </dependency>
      
          <dependency>
              <groupId>com.alibaba.nacos</groupId>
              <artifactId>nacos-client</artifactId>
              <version>1.1.1</version>
          </dependency>
      </dependencies>            
  2. 开发 Dubbo 服务提供者。
    Dubbo 中服务都是以接口的形式提供的。
    1. src/main/java路径下创建一个 package com.alibaba.edas
    2. com.alibaba.edas下创建一个接口(interface) IHelloService,里面包含一个 SayHello 方法。
      package com.alibaba.edas;
      
      public interface IHelloService {
         String sayHello(String str);
      }                                
    3. com.alibaba.edas下创建一个类IHelloServiceImpl,实现此接口。
      package com.alibaba.edas;
      
      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) 和 Scheme 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.edas.IHelloService" ref="helloService"/>
      
      <bean id="helloService" class="com.alibaba.edas.IHelloServiceImpl"/>                                
    4. provider.xml中将注册中心指定为本地启动的 Nacos Server。
      <dubbo:registry address="="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" />                                

      其中mse.XX.nacos.mse.aliyuncs.com为在 MSE 上传创建的 Nacos 的外网访问地址,如下图所示。

      在MSE创建Nacos完成
  4. 启动服务。
    1. com.alibaba.edas中创建类 Provider,并按下面的代码在 Provider 的 main 函数中加载 Spring Context,将配置好的 Dubbo 服务暴露。
      package com.alibaba.edas;
      
      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 服务表示,该服务注册成功。SpringCloud应用使用mse创建的nacos服务注册成功

创建服务消费者

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

  1. 创建 Maven 项目并引入依赖。
    1. 使用 IDE(如 IntelliJ IDEA 或 Eclipse)创建一个 Maven 项目。
    2. pom.xml文件中添加 dubbo、dubbo-registry-nacos 和 nacos-client 依赖。
      <dependencies>
      
          <dependency>
              <groupId>org.apache.dubbo</groupId>
              <artifactId>dubbo</artifactId>
              <version>2.7.3</version>
          </dependency>
      
          <dependency>
              <groupId>org.apache.dubbo</groupId>
              <artifactId>dubbo-registry-nacos</artifactId>
              <version>2.7.3</version>
          </dependency>
      
          <dependency>
              <groupId>com.alibaba.nacos</groupId>
              <artifactId>nacos-client</artifactId>
              <version>1.1.1</version>
          </dependency>
      </dependencies>            
  2. 开发 Dubbo 服务提供者。
    Dubbo 中服务都是以接口的形式提供的。
    1. src/main/java路径下创建 package com.alibaba.edas
    2. com.alibaba.edas下创建一个接口(interface) IHelloService,里面包含一个 SayHello 方法。
      说明 通常是在一个单独的模块中定义接口,服务提供者和服务消费者都通过 Maven 依赖来引用此模块。本文档为了简便,服务提供者和服务消费者分别创建两个完全一模一样的接口,实际使用中不推荐这样使用。
      package com.alibaba.edas;
      
      public interface IHelloService {
            String sayHello(String str);
      }                                
  3. 配置 Dubbo 服务。
    1. src/main/resources路径下创建 consumer.xml文件并打开。
    2. consumer.xml中,添加 Spring 相关的 XML Namespace(xmlns) 和 XML Schema Instance(xmlns:xsi),以及 Dubbo 相关的 Namespace(xmlns:dubbo) 和 Scheme 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. consumer.xml 中添加如下配置,订阅 Dubbo 服务
      <dubbo:application name="demo-consumer"/>
      
      <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848"/>
      
      <dubbo:reference id="helloService" interface="com.alibaba.edas.IHelloService"/>
  4. 启动、验证服务。
    1. com.alibaba.edas下创建类 Consumer,并按下面的代码在 Consumer 的 main 函数中加载 Spring Context,订阅并消费 Dubbo 服务。
      package com.alibaba.edas;
      
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      import java.util.concurrent.TimeUnit;
      
      public class Consumer {
         public static void main(String[] args) throws Exception {
         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"});
         context.start();
         while (true) {
         try {
               TimeUnit.SECONDS.sleep(5);
               IHelloService demoService = (IHelloService)context.getBean("helloService");
               String result = demoService.sayHello("world");
               System.out.println(result);
               } catch (Exception e) {
                 e.printStackTrace();
                 }
             }
           }
      }               
    2. 执行 Consumer 的 main 函数,启动服务。
  5. 验证结果。
    1. 登录 MSE 控制台
    2. 在左侧导航树中单击实例列表,并在实例列表页单击已创建的 MSE 实例。
    3. 设置 MSE 引擎访问白名单。
      如果没有填写任何 IP 地址及掩码,表示允许所有地址均可访问该实例。本文以无白名单为例。
    4. 在实例详情页面的左侧导航树单击服务管理

      如果在服务管理列表中存在所 Consumer 服务表示,该服务注册成功。

      SpringCloud应用使用mse创建的nacos服务注册成功-consumer

本地测试

在本地测试消费者对提供者的服务调用结果。

  • Linux/Unix/Mac 系统:运行以下命令。
    curl http://127.0.0.1:18082/echo-rest/rest-rest
    curl http://127.0.0.1:18082/echo-feign/feign-rest
  • Windows系统:在浏览器中输入 http://127.0.0.1:18082/echo-rest/rest-resthttp://127.0.0.1:18082/echo-feign/feign-rest

本示例以Windows系统为例。

Spring Cloud微服务应用是使用MSE调用成功