本文以包含服務提供者(Provider)和服務消費者(Consumer)的Spring Cloud微服務應用為例,指導您將原依賴Eureka、Consul、ZooKeeper等組件實現服務注冊與發(fā)現的Spring Cloud應用部署到SAE中,并實現應用的服務注冊與發(fā)現,以及Consumer對Provider的調用。
前提條件
下載并解壓Nacos Server。
進入nacos/bin目錄,啟動Nacos Server。
Linux、Unix、macOS系統(tǒng):執(zhí)行命令
sudo sh startup.sh -m standalone
。Windows系統(tǒng):執(zhí)行命令
startup.cmd -m standalone
。
說明standalone
表示單機模式運行,非集群模式。startup.cmd文件默認以集群模式啟動,因此您在使用Windows系統(tǒng)時,如果直接雙擊執(zhí)行startup.cmd文件會導致啟動失敗,此時需要在startup.cmd文件內設置MODE="standalone"
。 更多信息,請參見Nacos快速開始。
為什么托管到SAE
原依賴Eureka、Consul、ZooKeeper和Redis等組件實現服務注冊與發(fā)現的Spring Cloud應用,如果需要部署至SAE,僅需將原服務注冊與發(fā)現中心和配置中心替換為Alibaba Nacos Discovery,無需修改任何業(yè)務代碼。
SAE服務注冊中心具有Spring Cloud Alibaba Nacos Discovery所有功能,SAE服務注冊中心可以完全代替Eureka、Consul、ZooKeeper和Redis等,作為您微服務應用的服務注冊中心。
將Spring Cloud應用托管到SAE,您僅需關注Spring Cloud應用自身的邏輯,無需再關注注冊中心和配置中心的搭建和維護,托管后還可以使用SAE提供的彈性伸縮、一鍵批量啟停、應用監(jiān)控等功能,大幅度降低開發(fā)和運維成本。
當您的微服務應用較多時,注冊中心按推薦程度由高到低依次排序如下。
搭建并部署商業(yè)版的服務注冊中心(使用MSE的Nacos作為服務注冊中心)的具體操作,請參見使用MSE的Nacos注冊中心。
搭建并部署自建Nacos注冊中心時,您需要確認以下內容。
確保SAE的網絡與自建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
建議在部署應用時,使用鏡像或者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包方式,請在控制臺啟動命令設置區(qū)域的options設置文本框輸入
-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false
。圖示為Open JDK 8運行環(huán)境下的Java應用。具體操作,請參見設置啟動命令。
SAE提供Java微服務自動尋址的Nacos Server能力,您可以通過SAE的服務注冊發(fā)現功能配置。具體操作,請參見使用SAE內置Nacos。
步驟一:獲取Demo
eureka-service-provider和eureka-service-consumer是SAE提供的微服務Demo應用程序包,二者均為已經接入Eureka的Spring Cloud應用。Consumer應用消費Provider應用提供的服務。
Provider應用:eureka-service-provider.zip
Consumer應用:eureka-service-consumer.zip
步驟二:修改Provider應用的服務注冊與發(fā)現配置
將云原生的Provider應用托管到SAE中,需要在應用程序中修改pom依賴,并指定Nacos Server的IP地址。
以下情況需要指定Nacos Server的IP地址:
本地測試時,本地測試通過后再部署到SAE中。
SAE的服務注冊中心為自建的Nacos。
添加pom依賴。
打開應用的pom.xml文件,將
spring-cloud-starter-netflix-eureka-client
替換成為spring-cloud-starter-alibaba-nacos-discovery
,并設置Nacos Server的版本信息。替換前:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
替換后:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency>
說明示例中使用的版本是Spring Cloud Greenwich,對應
spring-cloud-starter-alibaba-nacos-discovery
的版本為2.1.1.RELEASE
。如果您使用的是Spring Cloud Finchley版本,對應
spring-cloud-starter-alibaba-nacos-discovery
的版本為2.0.1.RELEASE
。如果您使用的是Spring Cloud Edgware版本,對應
spring-cloud-starter-alibaba-nacos-discovery
的版本為1.5.1.RELEASE
。該版本的生命周期已結束,因此不推薦使用該版本。更多信息,請參見Spring Cloud Edgware Release Notes。
指定Nacos Server的IP地址。
打開src\main\resources路徑下的application.properties文件,指定Nacos Server的IP地址。
修改前:
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=127.0.0.1:8848
其中
127.0.0.1
為Nacos Server的IP地址。如果Nacos Server部署在其他機器上,則需要修改為對應的IP地址。如果有其他需求,請參見配置項參考在application.properties
文件中增加所需配置。查詢應用服務。
執(zhí)行
nacos-service-provider
中ProviderApplication
的main
函數,啟動應用。登錄本地啟動的Nacos Server控制臺
127.0.0.1:8848/nacos
,在左側導航欄中選擇 。說明本地Nacos Server控制臺的默認用戶名和密碼均為nacos。
如果服務列表中顯示service-provider,且在詳情中可以查詢該服務的詳情,那么表示服務注冊成功。
步驟三:修改Consumer應用的服務注冊與發(fā)現配置
將云原生的Consumer應用托管到SAE中,需要在應用程序中修改pom依賴,并指定Nacos Server的IP地址。
以下情況需要指定Nacos Server的IP地址:
本地測試時,本地測試通過后再部署到SAE中。
SAE的服務注冊中心為自建的Nacos。
添加pom依賴。
打開應用的pom.xml文件,將
spring-cloud-starter-netflix-eureka-client
替換成為spring-cloud-starter-alibaba-nacos-discovery
,并設置Nacos Server的版本信息。替換前:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
替換后:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency>
說明示例中使用的版本是Spring Cloud Greenwich,對應
spring-cloud-starter-alibaba-nacos-discovery
的版本為2.1.1.RELEASE
。如果您使用的是Spring Cloud Finchley版本,對應
spring-cloud-starter-alibaba-nacos-discovery
的版本為2.0.1.RELEASE
。如果您使用的是Spring Cloud Edgware版本,對應
spring-cloud-starter-alibaba-nacos-discovery
的版本為1.5.1.RELEASE
。該版本的生命周期已結束,因此不推薦使用該版本。更多信息,請參見Spring Cloud Edgware Release Notes。
指定Nacos Server的IP地址。
打開src\main\resources路徑下的application.properties文件,指定Nacos Server的IP地址。
修改前:
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=127.0.0.1:8848
其中
127.0.0.1
為Nacos Server的IP地址。如果Nacos Server部署在其他機器上,則需要修改為對應的IP地址。如果有其他需求,請參見配置項參考在application.properties
文件中增加所需配置。查詢應用服務。
執(zhí)行
nacos-service-consumer
中ConsumerApplication
的main
函數,啟動應用。登錄本地啟動的Nacos Server控制臺
127.0.0.1:8848/nacos
,在左側導航欄中選擇 。說明本地Nacos Server控制臺的默認用戶名和密碼均為nacos。
如果服務列表中顯示service-consumer,且在詳情中可以查詢該服務的詳情,那么表示服務注冊成功。
步驟四:查看Provider與Consumer的調用結果
在本地查看Consumer對Provider的服務調用結果。啟動服務,執(zhí)行IP+port/echo-rest/{自定義變量}
或IP+port/echo-feign/{自定義變量}
查看調用結果。
Linux、Unix、macOS系統(tǒng):執(zhí)行
curl http://127.0.0.1:18082/echo-rest/{自定義變量}
或curl http://127.0.0.1:18082/echo-feign/{自定義變量}
。Windows系統(tǒng):在瀏覽器中輸入
http://127.0.0.1:18082/echo-rest/{自定義變量}
或http://127.0.0.1:18082/echo-feign/{自定義變量}
。
示例:以Windows系統(tǒng)為例,當顯示以下結果時,表示Provider與Consumer業(yè)務調用成功。
步驟五:將應用部署到SAE
在應用的pom.xml文件中添加應用程序的打包配置,添加完成后執(zhí)行mvn clean package命令將本地的程序編譯成可執(zhí)行的JAR包。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
將編譯好的Provider和Consumer應用包部署至SAE。具體操作,請參見部署微服務應用到SAE。
重要SAE不支持創(chuàng)建空應用,因此第一次部署需在控制臺完成。
如果使用JAR包部署,在應用部署配置時選擇應用運行環(huán)境為標準Java應用運行環(huán)境。
如果使用WAR包部署,在應用部署配置時應用運行環(huán)境為apache-tomcat-XXX。
當您將應用部署到SAE時,SAE服務注冊中心以高優(yōu)先級自動設置Nacos Server服務端地址和服務端口,以及命名空間、AccessKey ID、AccessKey Secret等信息,您無需進行任何額外的配置。對于原有的配置內容您可以保留或刪除。
步驟六:結果驗證
配置項參考
配置項 | Key | 默認值 | 說明 |
服務端地址 | spring.cloud.nacos.discovery.server-addr | 無 | Nacos Server啟動監(jiān)聽的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 | 無 | 高優(yōu)先級。 |
注冊的端口 | spring.cloud.nacos.discovery.port | -1 | 默認情況下不用配置,系統(tǒng)會自動探測。 |
命名空間 | spring.cloud.nacos.discovery.namespace | 無 | 不同環(huán)境的注冊邏輯隔離,例如開發(fā)測試環(huán)境和生產環(huán)境的資源(如配置、服務)隔離等。 |
Metadata | spring.cloud.nacos.discovery.metadata | 無 | 使用Map格式配置,您可以根據自己需要自定義和服務相關的元數據信息。 |
集群 | spring.cloud.nacos.discovery.cluster-name | DEFAULT | 配置Nacos集群名稱。 |
接入點 | spring.cloud.nacos.discovery.endpoint | 無 | 地域的某個服務的入口域名,通過此域名可以動態(tài)地獲取服務端地址,此配置在部署到SAE時無需填寫。 |
是否集成Ribbon | ribbon.nacos.enabled | true | 如果沒有明確需求,不需要修改。 |
更多關于Spring Cloud Alibaba Nacos Discovery的信息,請參見開源版本的Spring Cloud Alibaba Nacos Discovery。
更多信息
SAE部署應用完成后,您可以對應用進行如下操作。
操作 | 相關文檔 |
更新、擴縮容、啟停、刪除應用等生命周期管理的操作 | |
自動彈性伸縮、CLB綁定和批量啟停等提升應用性能的操作 | |
日志管理、監(jiān)控管理、應用事件查看和變更記錄查看等聚焦應用運行狀態(tài)的操作 |