本文以包含服务提供者(Provider)和服务消费者(Consumer)的Spring Cloud微服务应用为例,指导您将原依赖Eureka、Consul、ZooKeeper等组件实现服务注册与发现的Spring Cloud应用部署到SAEServerless应用引擎SAE(Serverless App Engine)中,并实现应用的服务注册与发现,以及Consumer对Provider的调用。
前提条件
- 下载并解压Nacos Server。
- 进入nacos/bin目录,启动Nacos Server。
- Linux、Unix、macOS系统:执行命令
sh startup.sh -m standalone
。 - Windows系统:执行命令
startup.cmd -m standalone
。
说明standalone
表示单机模式运行,非集群模式。startup.cmd文件默认以集群模式启动,因此您在使用Windows系统时,如果直接双击执行startup.cmd文件会导致启动失败,此时需要在startup.cmd文件内设置MODE="standalone"
。 更多信息,请参见Nacos快速开始。 - Linux、Unix、macOS系统:执行命令
为什么托管到SAE
原依赖Eureka、Consul、ZooKeeper和Redis等组件实现服务注册与发现的Spring Cloud应用,如果需要部署至SAE,仅需将原服务注册与发现中心和配置中心替换为Alibaba Nacos Discovery,无需修改任何业务代码。
SAE服务注册中心具有Spring Cloud Alibaba Nacos Discovery所有功能,SAE服务注册中心可以完全代替Eureka、Consul、ZooKeeper和Redis等,作为您微服务应用的服务注册中心。
将Spring Cloud应用托管到SAE,您仅需关注Spring Cloud应用自身的逻辑,无需再关注注册中心和配置中心的搭建和维护,托管后还可以使用SAE提供的弹性伸缩、一键批量启停、应用监控等功能,大幅度降低开发和运维成本。
如果您选择商业版的服务注册中心,即使用MSE的Nacos作为服务注册中心,具体操作,请参见使用MSE的Nacos注册中心。
- 请确保SAE的网络与自建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
。图示为OpenJDK 8运行环境下的Java应用。具体操作,请参见设置启动命令。
- 如果采用镜像方式,请将
- 商业版的服务注册中心(MSE)
- 自建服务注册中心
- SAE内置服务注册中心
步骤一:获取Demo
- 通过GitHub获取Demo。
具体信息,请参见spring-cloud-simplest-demo。
- eureka-service-provider和eureka-service-consumer是SAE提供的微服务Demo应用程序包,二者均为已经接入Eureka的Spring Cloud应用。Consumer应用消费Provider应用提供的服务。
- Provider应用:eureka-service-provider
- Consumer应用:eureka-service-consumer
步骤二:修改Provider应用的服务注册与发现配置
将云原生的Provider应用托管到SAE中,需要在应用程序中修改pom依赖,并指定Nacos Server的IP地址。
- 本地测试时,本地测试通过后再部署到SAE中。
- SAE的服务注册中心为自建的Nacos。
步骤三:修改Consumer应用的服务注册与发现配置
将云原生的Consumer应用托管到SAE中,需要在应用程序中修改pom依赖,并指定Nacos Server的IP地址。
- 本地测试时,本地测试通过后再部署到SAE中。
- SAE的服务注册中心为自建的Nacos。
步骤四:查看Provider与Consumer的调用结果
在本地查看Consumer对Provider的服务调用结果。启动服务,执行IP+port/echo-rest/{自定义变量}
或IP+port/echo-feign/{自定义变量}
查看调用结果。
- Linux、Unix、macOS系统:执行
curl http://127.0.0.1:18082/echo-rest/{自定义变量}
或curl http://127.0.0.1:18082/echo-feign/{自定义变量}
。 - Windows系统:在浏览器中输入
http://127.0.0.1:18082/echo-rest/{自定义变量}
或http://127.0.0.1:18082/echo-feign/{自定义变量}
。
示例:以Windows系统为例,当显示以下结果时,表示Provider与Consumer业务调用成功。

步骤五:将应用部署到SAE
步骤六:结果验证
配置项参考
配置项 | Key | 默认值 | 说明 |
---|---|---|---|
服务端地址 | spring.cloud.nacos.discovery.server-addr | 无 | Nacos Server启动监听的IP地址和端口。 |
服务名 | spring.cloud.nacos.discovery.service | ${spring.application.name} | 当前服务的名称。 |
网卡名 | spring.cloud.nacos.discovery.network-interface | 无 | 当IP地址未配置时,注册IP为此网卡所对应的IP地址。如果此项也未配置,则默认取第一块网卡的IP地址。 |
注册的IP地址 | spring.cloud.nacos.discovery.ip | 无 | 高优先级。 |
注册的端口 | spring.cloud.nacos.discovery.port | -1 | 默认情况下不用配置,系统会自动探测。 |
命名空间 | spring.cloud.nacos.discovery.namespace | 无 | 不同环境的注册逻辑隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 |
Metadata | spring.cloud.nacos.discovery.metadata | 无 | 使用Map格式配置,您可以根据自己需要自定义和服务相关的元数据信息。 |
集群 | spring.cloud.nacos.discovery.cluster-name | DEFAULT | 配置成Nacos集群名称。 |
接入点 | spring.cloud.nacos.discovery.enpoint | UTF-8 | 地域的某个服务的入口域名,通过此域名可以动态地获取服务端地址,此配置在部署到SAE时无需填写。 |
是否集成Ribbon | ribbon.nacos.enabled | true | 一般不需要修改。 |
更多关于Spring Cloud Alibaba Nacos Discovery的信息,请参见开源版本的Spring Cloud Alibaba Nacos Discovery文档。