本文以包含服務提供者(Provider)和服務消費者(Consumer)的Spring Cloud微服務應用為例,指導您將原依賴Eureka、Consul、ZooKeeper等組件實現服務註冊與發現的應用,更改為使用Nacos作為服務註冊與發現中心,並部署到SAE。
前提條件
下載並解壓Nacos Server。
進入nacos/bin目錄,啟動Nacos Server。
Linux、Unix、macOS系統:執行命令
sudo sh startup.sh -m standalone。Windows系統:執行命令
startup.cmd -m standalone。
說明standalone表示單機模式運行,非叢集模式。startup.cmd檔案預設以叢集模式啟動,因此您在使用Windows系統時,如果直接雙擊執行startup.cmd檔案會導致啟動失敗,此時需要在startup.cmd檔案內設定MODE="standalone"。 更多資訊,請參見Nacos快速開始。
為什麼託管到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提供的Auto Scaling、一鍵批量啟停、應用監控等功能,大幅度降低開發和營運成本。
當您的微服務應用較多時,註冊中心按推薦程度由高到低依次排序如下。
步驟一:擷取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應用的服務註冊與發現配置
將雲原生的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檔案中增加所需配置。查詢應用服務。
執行
nacos-service-provider中ProviderApplication的main函數,啟動應用。登入本地啟動的Nacos Server控制台
127.0.0.1:8848/nacos,在左側導覽列中選擇。說明本地Nacos Server控制台的預設使用者名和密碼均為nacos。
如果服務列表中顯示service-provider,且在詳情中可以查詢該服務的詳細資料,那麼表示服務註冊成功。
步驟三:修改Consumer應用的服務註冊與發現配置
將雲原生的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檔案中增加所需配置。查詢應用服務。
執行
nacos-service-consumer中ConsumerApplication的main函數,啟動應用。登入本地啟動的Nacos Server控制台
127.0.0.1:8848/nacos,在左側導覽列中選擇。說明本地Nacos Server控制台的預設使用者名和密碼均為nacos。
如果服務列表中顯示service-consumer,且在詳情中可以查詢該服務的詳情,那麼表示服務註冊成功。
步驟四:查看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
本文將通過樣本說明如何在本地將程式編譯成JAR包。此外,您還可以選擇將該程式製作成鏡像並進行部署。
在應用的pom.xml檔案中添加應用程式的打包配置,添加完成後執行mvn clean package命令將本地的程式編譯成可執行檔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。具體操作,請參見使用JAR包部署Java應用。
重要SAE不支援建立空應用,因此第一次部署需在控制台完成。
如果使用JAR包部署,在應用部署配置時選擇應用運行環境為標準Java應用運行環境。
如果使用WAR包部署,在應用部署配置時應用運行環境為apache-tomcat-XXX。
當您將應用部署到SAE時,SAE服務註冊中心以高優先順序自動化佈建Nacos Server服務端地址和服務連接埠,以及命名空間、AccessKey ID、AccessKey Secret等資訊,您無需進行任何額外的配置。對於原有的配置內容您可以保留或刪除。
步驟六:結果驗證
為Consumer應用綁定公網CLB,並在瀏覽器鍵入所設定的公網訪問地址,進入應用首頁。具體操作,請參見為應用綁定CLB並產生應用的公網或私網訪問IP。
在應用首頁發起調用請求,然後登入SAE控制台,在左側導覽列,選擇,在頂部功能表列,選擇地區。
在應用列表頁面,選擇Consumer應用,進入基本資料頁面。
在左側導覽列,選擇,查看服務調用資料總覽。
如果能夠檢測到調用資料,則說明服務調用成功。
配置項參考
配置項 | 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.endpoint | 無 | 地區的某個服務的入口網域名稱,通過此網域名稱可以動態地擷取服務端地址,此配置在部署到SAE時無需填寫。 |
是否整合Ribbon | ribbon.nacos.enabled | true | 如果沒有明確需求,不需要修改。 |
更多關於Spring Cloud Alibaba Nacos Discovery的資訊,請參見開源版本的Spring Cloud Alibaba Nacos Discovery。
更多資訊
應用建立完成後,您可以對應用進行以下操作。



