本文主要面向 Spring Cloud 的使用者,通过示例介绍如何使用 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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR12</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
在 src\main\resources
路径下创建文件 application.properties
。
spring.application.name=mse-demo-provider server.port=8081 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.username=nacos spring.cloud.nacos.discovery.password=nacos
参数 | 说明 |
---|---|
spring.application.name | 应用的名称。 |
server.port | 可选,您需要接入的应用的端口号,默认为 80。 |
spring.cloud.nacos.discovery.server-addr | Nacos Server 的地址,即 MSE Nacos 实例私网或公网访问地址。 |
spring.cloud.nacos.config.username | Nacos 账号用户名。 |
spring.cloud.nacos.config.password | Nacos 账号密码。 |
说明
MSE Nacos 默认开启鉴权,用户必须配置鉴权后才能使用。初始用户名和密码为都为 nacos
,与控制台访问用户名相同。后续如需更改,支持通过控制台或 OpenAPI 实现。
在 src\main\java
路径下创建名为 com.bytedance.mse
的 Package。
在 com.bytedance.mse
中创建 ServiceProvider 的启动类 ProviderApplication
,代码如下。ProviderApplication
通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能。
package com.bytedance.mse; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }
在 com.bytedance.mse
中创建 Java 类 EchoController
,代码如下。
/echo/{String}
。package com.bytedance.mse; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class EchoController { @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return "Hello Nacos Discovery " + string; } }
在项目路径添加 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 镜像至镜像仓库,操作说明参见 推送和拉取镜像。
在容器服务创建无状态负载。操作说明参见 创建无状态负载。
创建命为 mse-demo-consumer 的 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-consumer</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR12</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
在 src\main\resources
路径下创建文件 application.properties
。
spring.application.name=mse-demo-consumer server.port=8082 spring.cloud.nacos.discovery.server-addr=0.0.0.0:8848
参数 | 说明 |
---|---|
spring.application.name | 应用的名称。 |
server.port | 可选,您需要接入的应用的端口号,默认为 80。 |
spring.cloud.nacos.discovery.server-addr | Nacos Server 的地址,即 MSE Nacos 实例私网或公网访问地址。端口号固定为 8848 。 |
spring.cloud.nacos.config.username | Nacos 账号用户名。 |
spring.cloud.nacos.config.password | Nacos 账号密码。 |
说明
MSE Nacos 默认开启鉴权,用户必须配置鉴权后才能使用。初始用户名和密码为都为 nacos
,与控制台访问用户名相同。后续如需更改,支持通过控制台或 OpenAPI 实现。
在 src\main\java
路径下创建名为 com.bytedance.mse
的 Package。
在 com.bytedance.mse
中创建 ServiceConsumer 的启动类 ConsumerApplication
,代码如下。ConsumerApplication
通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能。为 RestTemplate 实例添加 @LoadBalanced
注解,开启 @LoadBalanced
和 Ribbon 的集成。
package com.bytedance.mse; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableDiscoveryClient public class ConsumerApplication { @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
在 com.bytedance.mse
中创建 Java 类 TestController
,代码如下。
/echo/{String}
。restTemplate
中配置 ServiceProvider 名称。package com.bytedance.mse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class TestController { private final RestTemplate restTemplate; @Autowired public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;} @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) public String echo(@PathVariable String str) { return restTemplate.getForObject("http://mse-demo-provider/echo/" + str, String.class); } }
在项目路径添加 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 pacakage && docker build -t mse-demo/mse-demo-consumer .
推送 Docker 镜像至镜像仓库,操作说明参见 推送和拉取镜像。
在容器服务创建无状态负载。操作说明参见 创建无状态负载。
登录 Nacos 实例控制台,操作说明参见 登录 Nacos 控制台。
在左侧菜单栏,单击 服务管理 > 服务列表。即可查看已被发现的 Service Provider 和 Consumer。
访问 http://{{Consumer 外部端点地址}}/echo/{{字符串}}
,返回内容是 Hello Nacos Discovery {{字符串}}
。