本文主要面向 Dubbo 和 Spring Boot 的使用者,通过示例来介绍如何使用火山引擎微服务引擎 MSE Nacos 实现服务注册发现。
在微服务场景下,部分服务尽可能的拆解到最小的颗粒,确保服务和服务间的深度解耦,方便业务的快速迭代。但是随之而来的服务管理和控制变得异常的复杂和繁琐,维护成本大幅提升。服务注册和服务发现的诞生就可以有效的解决这些问题,提供开发和运维的效率。
注意
通过私网连通时,容器服务集群需要和微服务引擎实例处于同一个 VPC。
创建命名为 mse-demo-provider 的 Maven 工程。
在 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>
在 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.address | 以 nacos:// 开头, 后面接 Nacos Server 的地址和 Nacos 的账号和密码。
|
dubbo.scan.basePackages | 含有com.alibaba.dubbo.config.annotation.Service 和com.alibaba.dubbo.config.annotation.Reference 注解所在的包,本示例为com.bytedance.mse 。 |
说明
nacos
,与控制台访问用户名相同。后续如需更改,支持通过控制台或 OpenAPI 实现。在 src\main\java
路径下创建名为 com.bytedance.mse
的 Package。
在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); } }
在com.bytedance.mse
中创建 EchoService 接口。Dubbo 中服务都是以接口的形式提供的。
package com.bytedance.mse; public interface EchoService { String echo(String str); }
在 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; } }
在项目路径添加 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"]
在 Terminal 执行以下操作。
mvn package && docker build -t mse-demo/mse-demo-provider .
推送 Docker 镜像至镜像仓库,操作说明参见 推送和拉取镜像。
在容器服务创建无状态负载。操作说明参见 创建无状态负载。
创建 Maven工程,命名为 mse-demo-consumer。
在 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>
在 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.address | 以 nacos:// 开头, 后面接 Nacos Server 的地址和用于鉴权的 Nacos 的账号和密码。
|
说明
nacos
,与控制台访问用户名相同。后续如需更改,支持通过控制台或 OpenAPI 实现。在 src\main\java
路径下创建名为 com.bytedance.mse
的 Package。
在 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); } }
在com.bytedance.mse
中创建 EchoService 接口,Dubbo 中服务都是以接口的形式提供的。
package com.bytedance.mse; public interface EchoService { String echo(String str); }
在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); } }
在项目路径添加 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"]
在 Terminal 执行以下操作
mvn package && docker build -t mse-demo/mse-demo-consumer .
推送 Docker 镜像至镜像仓库,操作说明参见 推送和拉取镜像。
在容器服务创建无状态负载。操作说明参见 创建无状态负载。
登录 Nacos 实例控制台,操作说明参见 登录 Nacos 控制台。
在左侧菜单栏,单击 服务管理 > 服务列表。即可查看已被发现的 Service Provider 和 Consumer。
com.bytedance.mse.EchoService::
com.bytedance.mse.EchoService::
访问 http://{服务消费者外部端点地址}/echo/{字符串}
,返回内容是 Hello Nacos Discovery {字符串}
。