使用MSE的Nacos注册中心

本地开发的Spring Cloud应用或者Dubbo应用托管到Serverless 应用引擎 SAE(Serverless App Engine)时,您可以使用SAE的注册中心,也可以使用MSE托管的注册中心。本文介绍如何搭建MSE的Nacos服务注册中心,并将应用部署在SAE进行托管。

前提条件

  • 已创建专有网络,并确保网络可用。具体操作,请参见创建和管理专有网络

  • 执行应用程序前,确保Nacos注册中心的访问端口(例如8848)已添加至安全组。具体操作,请参见添加安全组规则

  • 使用MSE Nacos版本限制说明

    SDK 版本号

    配置中心

    注册中心

    nacos-client-1.0.0.jar

    PASS

    PASS

    nacos-client-1.0.0-RC1.jar

    FAIL

    FAIL

    nacos-client-1.0.0-RC2.jar

    FAIL

    FAIL

    nacos-client-1.0.0-RC3.jar

    FAIL

    FAIL

    nacos-client-1.0.0-RC4.jar

    PASS

    FAIL

    nacos-client-1.0.1.jar

    PASS

    PASS

    nacos-client-1.1.0.jar

    PASS

    PASS

    nacos-client-1.1.1.jar

    PASS

    PASS

    nacos-client-1.1.2.jar

    PASS

    PASS

    nacos-client-1.1.3.jar

    PASS

    PASS

    nacos-client-1.1.4.jar

    PASS

    PASS

    nacos-client-1.2.0.jar

    PASS

    PASS

    nacos-client-1.2.0-beta.0.jar

    PASS

    PASS

    nacos-client-1.2.0-beta.1.jar

    PASS

    PASS

    nacos-client-1.2.1.jar

    PASS

    PASS

    nacos-client-1.3.0.jar

    PASS

    PASS

    nacos-client-1.3.1.jar

    PASS

    PASS

    nacos-client-1.3.1-BETA.1.jar

    PASS

    PASS

    nacos-client-1.3.1-BETA.jar

    PASS

    PASS

    nacos-client-1.3.2.jar

    PASS

    PASS

    nacos-client-1.3.3.jar

    PASS

    PASS

    nacos-client-1.4.0.jar

    PASS

    PASS

    nacos-client-1.4.0-BETA.jar

    PASS

    PASS

    nacos-client-1.4.1.jar

    PASS

    PASS

    nacos-client-1.4.2.jar

    PASS

    PASS

    nacos-client-1.4.3.jar

    PASS

    PASS

    nacos-client-1.4.4.jar

    PASS

    PASS

    nacos-client-1.4.5.jar

    PASS

    FAIL

    nacos-client-1.4.6.jar

    PASS

    PASS

    nacos-client-1.4.7.jar

    PASS

    PASS

    nacos-client-1.4.8.jar

    PASS

    PASS

    nacos-client-2.0.0.jar

    FAIL

    PASS

    nacos-client-2.0.0-ALPHA.1.jar

    FAIL

    FAIL

    nacos-client-2.0.0-ALPHA.2.jar

    FAIL

    FAIL

    nacos-client-2.0.0-BETA.jar

    FAIL

    PASS

    nacos-client-2.0.1.jar

    FAIL

    PASS

    nacos-client-2.0.2.jar

    PASS

    PASS

    nacos-client-2.0.3.jar

    PASS

    PASS

    nacos-client-2.0.4.jar

    PASS

    PASS

    nacos-client-2.1.0.jar

    PASS

    FAIL

    nacos-client-2.1.0-BETA.jar

    PASS

    FAIL

    nacos-client-2.1.1.jar

    PASS

    FAIL

    nacos-client-2.1.2.jar

    PASS

    PASS

    nacos-client-2.2.0.jar

    PASS

    PASS

    nacos-client-2.2.0-BETA.jar

    PASS

    PASS

    nacos-client-2.2.1.jar

    PASS

    PASS

    nacos-client-2.2.1-RC.jar

    PASS

    PASS

    nacos-client-2.2.2.jar

    PASS

    PASS

    nacos-client-2.2.3.jar

    PASS

    PASS

    nacos-client-2.2.4.jar

    PASS

    PASS

    nacos-client-2.3.0.jar

    PASS

    PASS

    nacos-client-2.3.0-BETA.jar

    PASS

    PASS

    nacos-client-2.3.1.jar

    PASS

    PASS

    nacos-client-2.3.2.jar

    FAIL

    PASS

    nacos-client-2.3.3.jar

    FAIL

    PASS

    nacos-client-2.4.0.jar

    PASS

    PASS

    nacos-client-2.4.0-BETA.jar

    FAIL

    PASS

    nacos-client-2.4.1.jar

    PASS

    PASS

    nacos-client-2.4.2.jar

    PASS

    PASS

    MSE中存在Nacos SDK限制使用版本。为了您微服务系统的稳定性,建议您避开Nacos SDK限制使用版本。如果您的业务已经依赖了这些版本,MSE也针对这些版本可能出现的风险提供了对应的建议和解决方案。

    重要

    新购买的Nacos引擎实例默认关闭鉴权功能,建议在购买并测试完成后,开启鉴权并关闭公网白名单,以保证实例的安全性。具体操作,请参见Nacos Client访问鉴权设置白名单

背景信息

某创业公司现在需要将微服务应用托管至SAE,期望使用MSE Nacos,不使用SAE内置注册中心。

如果是集群部署,请参见集群部署说明

当您的微服务应用较多时,注册中心按推荐程度由高到低依次排序如下:

  • 商业版的服务注册中心(MSE Nacos)

  • 自建服务注册中心

  • SAE内置服务注册中心

使用自建Nacos作为应用服务发现、配置管理等功能,您需要购买相应的资源进行搭建和维护,耗时耗力。使用MSE构建的Nacos集群,您仅需关注Nacos的构建位置、版本、网络和规格,不必关注Nacos的构建和维护,更加专注于业务本身的实现。

步骤一:购买并构建Nacos引擎

关于如何在MSE上为应用创建Nacos引擎的具体操作,请参见创建Nacos引擎

重要

购买的Nacos注册中心,尽量与SAE应用使用同一个VPC,或者使用其他方式保持网络互通。

步骤二:服务注册与发现

Nacos启动后,服务注册与发现功能需要在应用侧指定服务注册中心进行操作。应用程序执行后,系统会依据所设服务注册中心,自动进行服务注册与发现。

重要

执行应用程序前,请确保您Nacos注册中心的访问端口(例如8848)已添加至您的安全组。

在服务应用侧指定注册中心,并运行Provider和Consumer应用。

分别打开src\main\resources路径下的application.properties文件,指定Nacos Server的IP地址。

当使用MSE的Nacos注册中心时,您可以登录MSE注册配置中心管理控制台,在实例列表页面,单击目标实例。然后在目标实例的基础信息页面,获取注册中心的内网地址。sc_nacos_intranet_address

  • Provider

    修改前:

    spring.application.name=service-provider
    server.port=18081
    eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8761/eureka/

    修改后:

    spring.application.name=service-provider
    server.port=18081
    spring.cloud.nacos.discovery.server-addr=192.168.XX.XX:8848 # 替换为您购买的Nacos注册中心的地址,例如mse:**********:8848。
  • Consumer

    修改前:

    spring.application.name=service-consumer
    server.port=18082
    eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8761/eureka/

    修改后:

    spring.application.name=service-consumer
    server.port=18082
    spring.cloud.nacos.discovery.server-addr=192.168.XX.XX:8848 # 替换为您购买的Nacos注册中心的地址,例如mse:**********:8848。

步骤三:应用托管至SAE

将本地服务Provider和Consumer应用程序编译为WAR包、JAR包或者镜像,部署到SAE并按需选择以下方式连接Nacos。具体操作,请参见以下文档:

方式一:配置服务注册发现

SAE提供Java微服务自动寻址的Nacos Server能力,您可以通过SAE服务注册发现功能配置。具体操作,请参见使用SAE内置Nacos

image.png

方式二:配置启动参数

通过配置启动参数的方式时,您需要确认以下内容。

  • 确保SAE的网络与MSE Nacos的网络互通。

  • 建议在部署应用时,使用镜像或者JAR包方式,并配置启动参数-Dnacos.use.endpoint.parsing.rule=false-Dnacos.use.cloud.namespace.parsing=false

    重要

    启动参数需要放在-jar之前,否则可能会导致无法使用非SAE自带的注册中心。

    • 如果采用镜像方式,请将-Dnacos.use.endpoint.parsing.rule=false-Dnacos.use.cloud.namespace.parsing=false配置在镜像文件的程序启动命令中。Docker镜像制作方法,请参见制作Java镜像

      示例代码如下:

      RUN echo 'eval exec java -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar $CATALINA_OPTS /home/admin/app/hello-edas-0.0.1-SNAPSHOT.jar'> /home/admin/start.sh && chmod +x /home/admin/start.sh
    • 如果采用JAR包方式,请在控制台启动命令设置区域的options设置文本框输入-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false。图示为Open JDK 8运行环境下的Java应用。具体操作,请参见设置启动命令sc_configure_a_startup_command_for_nacos

  • 确保-D-XX参数未交替使用,以免命令失效。示例代码如下:

    • 修改前:

      java -Dalicloud.deployment.mode=EDAS_MANAGED -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.netty.transport.noNative=true -XX:+UseG1GC -Dspring.profiles.active=yace -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar
    • 修改后:

      java -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.netty.transport.noNative=true -XX:+UseG1GC -Dspring.profiles.active=yace -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar

结果验证

以Consumer应用为例,在基础信息页面单的实例列表页签,在实例列表操作列,单击Webshell,在Webshell窗口执行相关命令,验证应用部署是否成功。更多信息,请参见使用Webshell诊断应用

  1. 验证服务是否成功注册。

    curl -X GET 'http://192.168.XX.XX:8848/nacos/v1/ns/instance/list?serviceName=service-provider'
    • service-provider:服务名。

    • 192.168.XX.XX:8848:安装Nacos的主机IP地址和端口号。192.168.XX.XX需替换成MSE Nacos注册中心的内网地址。关于如何获取,请参见步骤二:服务注册与发现

    返回结果如下,表示服务已注册成功。

    sc_verify_mse_nacos_via_webshell

  2. 验证整个微服务应用的访问链路是否正常。

    按需选择以下命令。127.0.0.1:18082为运行Provider和Consumer的主机IP地址和访问端口。

    • curl http://127.0.0.1:18082/echo-rest/{自定义变量}
    • curl http://127.0.0.1:18082/echo-feign/{自定义变量}

    返回结果如下,表示Consumer应用已成功调用Provider应用,微服务应用的访问链路正常。sc_verify_access_link_via_webshell

更多信息

如果应用托管失败,请参见以下文档定位问题: