本文以包含服务提供者和服务消费者的Spring Cloud应用为例,让您快速体验如何在本地开发、调试Spring Cloud应用并部署到SAE中,实现应用的服务注册与发现,以及消费者对提供者的调用。
背景信息
- 如果您对Spring Cloud很陌生,仅了解Spring和Maven基础知识,那么阅读本文后,您将掌握如何通过Spring Cloud Alibaba Nacos Discovery实现Spring Cloud应用的服务注册与发现,以及实现消费者对提供者的调用。
- 如果您熟悉Spring Cloud中的Eureka、Consul和ZooKeeper等服务注册组件,但未使用过Spring Cloud Alibaba的服务注册组件Nacos
Discovery,那么您仅需将服务注册组件的服务依赖关系和服务配置替换成Spring Cloud Alibaba Nacos Discovery,无需修改任何代码。
Spring Cloud Alibaba Nacos Discovery同样实现了Spring Cloud Registry的标准接口与规范,与您之前使用Spring Cloud接入服务注册与发现的方式基本一致。
- 如果您熟悉如何使用开源版本的Spring Cloud Alibaba Nacos Discovery实现Spring Cloud应用的服务注册与发现,那么您可以将应用直接部署到SAE,即可使用到SAE提供的商业版服务注册与发现的能力。更多信息,请参见应用部署概述。
为什么使用SAE服务注册中心
SAE服务注册中心提供了开源Nacos Server的商用版本,使用开源版本Spring Cloud Alibaba Nacos Discovery
开发的应用可以直接使用SAE提供的商业版服务注册中心。
SAE服务注册中心与Nacos、Eureka和Consul相比,具有以下优势:
- 共享组件,节省了部署、运维Nacos、Eureka或Consul的成本。
- 在服务注册和发现的调用中都进行了链路加密,保护您的服务,无需再担心服务被未授权的应用发现。
- SAE服务注册中心与SAE其他组件紧密结合,为您提供一整套的微服务解决方案,包括环境隔离、灰度发布等。
您在SAE部署应用时,SAE服务注册中心以高优先级自动设置Nacos Server服务端地址和服务端口,以及命名空间、AccessKey、Context-path等信息,无需进行任何额外的配置。
- 商业版的服务注册中心(MSE)
- 自建服务注册中心
- 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应用。具体操作,请参见设置启动命令。
- 如果采用镜像方式,请将
准备工作
在开始开发前,请确保您已经完成以下工作。
- 下载Maven并设置环境变量。
- 下载最新版本的Nacos Server。
- 按以下步骤启动Nacos Server。
- 解压下载的Nacos Server压缩包。
- 进入
nacos/bin
目录,启动Nacos Server。- Linux/Unix/Mac系统:执行命令
sh startup.sh -m standalone
。 - Windows系统:双击执行
startup.cmd
文件。
- Linux/Unix/Mac系统:执行命令
创建服务提供者
在本地创建服务提供者应用工程,添加依赖,开启服务注册与发现功能,并将注册中心指定为Nacos Server。
创建服务消费者
本节除介绍服务注册的功能,还将介绍Nacos服务与RestTemplate和FeignClient两个客户端如何配合使用。
本地测试
在本地测试消费者对提供者的服务调用结果。
- Linux/Unix/Mac系统:运行以下命令。
curl http://127.0.0.1:18082/echo-rest/rest-rest curl http://127.0.0.1:18082/echo-feign/feign-rest
- Windows系统:在浏览器中输入http://127.0.0.1:18082/echo-rest/rest-rest和http://127.0.0.1:18082/echo-feign/feign-rest。
将应用部署到SAE
- SAE暂不支持创建空应用,因此第一次部署需在控制台完成。
- 如果使用JAR包部署,在应用部署配置时选择应用运行环境为标准Java应用运行环境。
- 如果使用WAR包部署,在应用部署配置时应用运行环境为pache-tomcat-XXX。
当您将应用部署到SAE时,SAE服务注册中心会以更高优先级去设置Nacos Server服务端地址和服务端口,以及命名空间、AccessKey、Context-path信息。您无需进行任何额外的配置,原有的配置内容可以选择保留或删除。
结果验证
配置项参考
配置项 | 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地址 | 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.endpoint | UTF-8 | 地域的某个服务的入口域名。通过此域名可以动态地获取服务端地址,此配置在部署到EDAS时无需填写。 |
是否集成Ribbon | ribbon.nacos.enabled | true | 如果没有明确需求,不需要修改。 |
更多关于Spring Cloud Alibaba Nacos Discovery的信息,请参见开源版本的Nacos Discovery。
更多信息
- 更多关于Spring Cloud Alibaba Nacos Discovery的信息,请参见Spring Cloud Alibaba Nacos Discovery。
- 如果您在本地开发了依赖Eureka、Consul、ZooKeeper等组件实现的服务注册与发现的Spring Cloud应用,那么修改该应用的依赖配置并部署至SAE的相关操作请参见将Spring Cloud应用托管到SAE。