You need to enable JavaScript to run this app.
微服务引擎

微服务引擎

复制全文
微服务应用开发
基于 Dubbo 使用 Nacos 服务注册中心
复制全文
基于 Dubbo 使用 Nacos 服务注册中心

本文主要面向 DubboSpring Boot 的使用者,通过示例来介绍如何使用火山引擎微服务引擎 MSE Nacos 实现服务注册发现。

背景信息

在微服务场景下,部分服务尽可能的拆解到最小的颗粒,确保服务和服务间的深度解耦,方便业务的快速迭代。但是随之而来的服务管理和控制变得异常的复杂和繁琐,维护成本大幅提升。服务注册和服务发现的诞生就可以有效的解决这些问题,提供开发和运维的效率。

  • 服务注册:将服务模块的信息注册到一个公告的组件上,例如注册中心。
  • 服务发现:新注册的服务模块能够及时被其他的服务调用发现。
  • Apache Dubbo: 一款微服务开发框架,它提供了 RPC 通信与微服务治理两大关键能力。使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。

前提条件

  • 已创建微服务引擎实例,操作说明参见 创建实例
  • 已创建容器服务集群,并开启 公网访问,操作说明参见 创建集群

    注意

    通过私网连通时,容器服务集群需要和微服务引擎实例处于同一个 VPC。

  • 已安装 Maven v3.8.0 以上版本,操作说明参见 Downloading Apache Maven
  • 已安装 Docker v20.0.0 以上版本,操作说明参见 Get Docker
  • 已安装 Dubbo v2.7.8 及以上版本。

操作步骤

步骤一:创建 Provider

  1. 创建命名为 mse-demo-provider 的 Maven 工程。

  2. pom.xml 文件中添加依赖:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>mse-demo-provider</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>2.7.8</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>2.3.12.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>2.0.4</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.12.0</version>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.3.12.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
  3. src\main\resources 路径下创建文件 application.properties

    dubbo.application.name=mse-demo-provider
    dubbo.registry.address=nacos://127.0.0.1:8848?username=nacos&password=nacos
    dubbo.scan.basePackages=com.bytedance.mse
    
    参数说明
    dubbo.application.name固定填写 mse-demo-provider
    dubbo.registry.addressnacos://开头, 后面接 Nacos Server 的地址和 Nacos 的账号和密码。
    • Nacos Server 的地址:即 MSE Nacos 实例私网或公网访问地址。地址支持在微服务引擎实例的 基本信息 > 私网地址公网地址 位置查看。
    • Nacos 的账号和密码:固定添加 username=nacos&password=nacos
    dubbo.scan.basePackages含有com.alibaba.dubbo.config.annotation.Servicecom.alibaba.dubbo.config.annotation.Reference注解所在的包,本示例为com.bytedance.mse

    说明

    • MSE Nacos 默认开启鉴权,用户必须配置鉴权后才能使用。初始用户名和密码为都为 nacos,与控制台访问用户名相同。后续如需更改,支持通过控制台或 OpenAPI 实现。
    • Dubbo 2.7.8 及以上版本支持 Nacos 鉴权。
  4. src\main\java 路径下创建名为 com.bytedance.msePackage

  5. com.bytedance.mse中创建类 ProviderApplication,代码如下。

    package com.bytedance.mse;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProviderApplication.class, args);
        }
    }
    
  6. com.bytedance.mse 中创建 EchoService 接口。Dubbo 中服务都是以接口的形式提供的。

    package com.bytedance.mse;
    
    public interface EchoService {
        String echo(String str);
    }
    
  7. com.bytedance.mse 中创建 EchoServiceImpl 类,并实现 EchoService 接口。EchoServiceImpl 使用 Dubbo 提供的一个Service注解类。

    package com.bytedance.mse;
    
    import org.apache.dubbo.config.annotation.Service;
    
    @Service
    public class EchoServiceImpl implements EchoService {
        @Override
        public String echo(String str) {
            return "Hello Nacos Discovery " + str;
        }
    }
    
  8. 在项目路径添加 Dockerfile。

    说明

    路径地址示例 /Users/bytedance/IdeaProjects/mse-demo-provider

    FROM openjdk:11-jdk-slim
    ARG JAR_FILE=target/*.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    
  9. 在 Terminal 执行以下操作。

    mvn package && docker build -t mse-demo/mse-demo-provider .
    
  10. 推送 Docker 镜像至镜像仓库,操作说明参见 推送和拉取镜像

  11. 在容器服务创建无状态负载。操作说明参见 创建无状态负载

步骤二:创建 Consumer

  1. 创建 Maven工程,命名为 mse-demo-consumer

  2. pom.xml 文件中添加依赖。

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>mse-demo-consumer</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>2.7.8</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>2.3.12.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>2.0.4</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.12.0</version>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.3.12.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
  3. src\main\resources 路径下创建文件 application.properties

    dubbo.application.name=mse-demo-consumer
    dubbo.registry.address=nacos://127.0.0.1:8848?username=nacos&password=nacos
    
    参数说明
    dubbo.application.name工程的名称,本示例为 mse-demo-dubbo-consumer
    dubbo.registry.addressnacos://开头, 后面接 Nacos Server 的地址和用于鉴权的 Nacos 的账号和密码。
    • Nacos Server 的地址:即 MSE Nacos 实例私网和公网访问地址。地址支持在微服务引擎实例的 基本信息 > 私网地址公网地址 位置查看。
    • Nacos 的账号和密码:固定添加 username=nacos&password=nacos

    说明

    • MSE Nacos 默认开启鉴权,用户必须配置鉴权后才能使用。初始用户名和密码为都为 nacos,与控制台访问用户名相同。后续如需更改,支持通过控制台或 OpenAPI 实现。
    • Dubbo 2.7.8 及以上版本支持 Nacos 鉴权。
  4. src\main\java 路径下创建名为 com.bytedance.msePackage

  5. com.bytedance.mse 中创建类 ConsumerApplication,代码如下。

    package com.bytedance.mse;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    }
    
  6. com.bytedance.mse中创建 EchoService 接口,Dubbo 中服务都是以接口的形式提供的。

    package com.bytedance.mse;
    
    public interface EchoService {
        String echo(String str);
    }
    
  7. com.bytedance.mse中创建 TestController 类。TestController 使用 Dubbo 提供的Reference 注解类提供服务发现与调用。

    package com.bytedance.mse;
    
    import org.apache.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 TestController {
        @Reference
        private EchoService demoService;
    
        @RequestMapping("/echo/{str}")
        public String echo(@PathVariable String str) {
            return demoService.echo(str);
        }
    }
    
  8. 在项目路径添加 Dockerfile。

    说明

    路径地址示例 /Users/bytedance/IdeaProjects/mse-demo-consumer

    FROM openjdk:11-jdk-slim
    ARG JAR_FILE=target/*.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    
  9. 在 Terminal 执行以下操作

    mvn package && docker build -t mse-demo/mse-demo-consumer .
    
  10. 推送 Docker 镜像至镜像仓库,操作说明参见 推送和拉取镜像

  11. 在容器服务创建无状态负载。操作说明参见 创建无状态负载

结果验证

  1. 登录 Nacos 实例控制台,操作说明参见 登录 Nacos 控制台

  2. 在左侧菜单栏,单击 服务管理 > 服务列表。即可查看已被发现的 Service Provider 和 Consumer。

    • providers: com.bytedance.mse.EchoService::
    • consumers: com.bytedance.mse.EchoService::

    alt

  3. 访问 http://{服务消费者外部端点地址}/echo/{字符串},返回内容是 Hello Nacos Discovery {字符串}

    • 服务消费者外部端点地址:可以在容器服务中的工作负载的 访问方式 > 服务 > 外部端点 中查看。示例如下。
      alt
    • 字符串:用于验证返回内容的正确性,可以自行填写。
最近更新时间:2023.11.10 17:24:38
这个页面对您有帮助吗?
有用
有用
无用
无用