文档

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

更新时间:

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

准备工作

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

创建服务提供者

在本地创建一个提供者应用工程,添加依赖,配置服务注册与发现,并将注册中心指定为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.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服务,表示该服务注册成功。

创建服务消费者

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

创建Maven项目命名为spring-boot-dubbo-consumer并引入依赖。

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

  2. pom.xml文件中添加dubbo-spring-boot-starternacos-client依赖,这里以Spring Boot 2.4.2为例。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.4.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.1.1</version>
        </dependency>
    
    </dependencies> 
  3. 开发Dubbo消费者。

    1. src/main/java路径下创建packagecom.alibaba.mse

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

      package com.alibaba.mse;
      
      public interface IHelloService {
          String sayHello(String str);
      }
      
  4. 开发Dubbo服务调用,需要在Controller中调用一次远程Dubbo服务,开发的代码如下所示。

    package com.alibaba.mse;
    
    import com.alibaba.dubbo.config.annotation.Reference;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class DemoConsumerController {
        @Reference
        private IHelloService demoService;
    
        @RequestMapping("/sayHello/{name}")
        public String sayHello(@PathVariable String name) {
            return demoService.sayHello(name);
        }
    }
    
    说明

    这里的@Reference注解是com.alibaba.dubbo.config.annotation.Reference。

  5. application.properties配置文件中新增以下配置。

    server.port=8080
    dubbo.application.name=dubbo-consumer-demo
    dubbo.registry.address=nacos://mse.XX.nacos.mse.aliyuncs.com:8848
    说明

    dubbo.registry.address的值前缀必须以nacos://开头,后面的IP地址和端口为MSE Nacos Server的地址。

  6. 开发并启动Spring Boot入口类SpringBootDubboConsumerApplication

    package com.alibaba.mse;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SpringBootDubboConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootDubboConsumerApplication.class, args);
        }
    } 
  1. 验证结果。

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

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

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

      如果没有填写任何IP地址及掩码,表示允许所有地址均可访问该实例。

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

结果验证

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

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

`Hello, mse`            

相关文档