You need to enable JavaScript to run this app.
文档中心
微服务引擎

微服务引擎

复制全文
下载 pdf
微服务应用开发
基于 Spring Cloud 使用 Nacos 服务注册中心
复制全文
下载 pdf
基于 Spring Cloud 使用 Nacos 服务注册中心
本文主要面向 Spring Cloud 的使用者,通过示例介绍如何使用 MSE Nacos 来实现服务注册发现。​
说明​
前提条件​
  • 已创建微服务引擎实例,操作说明参见 创建实例。​
  • 已创建容器服务集群,并开启 公网访问,操作说明参见 创建集群。​
注意​
通过私网连通时,容器服务集群需要和微服务引擎实例处于同一个 VPC。​
  • 已安装 Docker,操作说明参见 Get Docker。​
操作步骤​
步骤一:创建 Provider​
  1. 创建命名为 mse-demo-provider 的 Maven 工程。​
  1. 在 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.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>​
    <dependency>​
    <groupId>com.alibaba.nacos</groupId>​
    <artifactId>nacos-client</artifactId>​
    <version>2.1.2</version>​
    </dependency> ​
    </dependencies>​
    </dependencyManagement>​
    <build>​
    <plugins>​
    <plugin>​
    <groupId>org.springframework.boot</groupId>​
    <artifactId>spring-boot-maven-plugin</artifactId>​
    </plugin>​
    </plugins>​
    </build>​
    ​
    </project>​
    ​
  1. 在 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 实现。​
  1. 在 src\main\java 路径下创建名为 com.bytedance.mse 的 Package。​
  1. 在 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);​
    }​
    }​
    ​
  1. 在 com.bytedance.mse 中创建 Java 类 EchoController,代码如下。​
  • 指定 URL mapping 为 /echo/{String}。​
  • 指定 HTTP 方法为 GET,方法参数从 URL 路径中获得。​
  • 配置返回方法。​
  • ​
    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;​
    }​
    }​
    ​
  1. 在项目路径添加 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"]​
    ​
  1. 在 Terminal 执行以下操作。​
  • ​
    mvn package && docker build -t mse-demo/mse-demo-provider .​
    ​
  1. 推送 Docker 镜像至镜像仓库,操作说明参见 推送和拉取镜像基于。​
  1. 在容器服务创建无状态负载。操作说明参见 创建无状态负载。​
步骤二:创建 Consumer​
  1. 创建命为 mse-demo-consumer 的 Maven 工程。​
  1. 在 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>​
    <dependency>​
    <groupId>com.alibaba.nacos</groupId>​
    <artifactId>nacos-client</artifactId>​
    <version>2.1.2</version>​
    </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>​
    ​
  1. 在 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 实现。​
  1. 在 src\main\java 路径下创建名为 com.bytedance.mse 的 Package。​
  1. 在 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);​
    }​
    }​
    ​
  1. 在 com.bytedance.mse 中创建 Java 类 TestController,代码如下。​
  • 指定 URL mapping 为 /echo/{String}。​
  • 指定 HTTP 方法为 GET,方法参数从 URL 路径中获得。​
  • 在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);​
    }​
    }​
    ​
  1. 在项目路径添加 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"]​
    ​
  1. 在 Terminal 执行以下操作​
  • ​
    mvn package && docker build -t mse-demo/mse-demo-consumer .​
    ​
  1. 推送 Docker 镜像至镜像仓库,操作说明参见 推送和拉取镜像基于。​
  1. 在容器服务创建无状态负载。操作说明参见 创建无状态负载。​
结果验证​
  1. 登录 Nacos 实例控制台,操作说明参见 登录 Nacos 控制台。​
  1. 在左侧菜单栏,单击 服务管理 > 服务列表。即可查看已被发现的 Service Provider 和 Consumer。​
  • ​​​
  1. 访问 http://{{Consumer 外部端点地址}}/echo/{{字符串}},返回内容是 Hello Nacos Discovery {{字符串}}。​
​
最近更新时间:2026.02.13 15:03:09
这个页面对您有帮助吗?
有用
有用
无用
无用