全部產品
Search
文件中心

Serverless App Engine:將應用的服務註冊與發現中心更改為Nacos

更新時間:Feb 26, 2025

本文以包含服務提供者(Provider)和服務消費者(Consumer)的Spring Cloud微服務應用為例,指導您將原依賴Eureka、Consul、ZooKeeper等組件實現服務註冊與發現的應用,更改為使用Nacos作為服務註冊與發現中心,並部署到SAE

前提條件

  1. 下載並解壓Nacos Server

  2. 進入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、一鍵批量啟停、應用監控等功能,大幅度降低開發和營運成本。

當您的微服務應用較多時,註冊中心按推薦程度由高到低依次排序如下。

  • 商業版的服務註冊中心(MSE)

    ZF182Dl2pw

    使用MSE的Nacos作為服務註冊中心的具體操作,請參見使用MSE的Nacos註冊中心

  • 自建服務註冊中心

    7D79jXUfBL

    搭建並部署自建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包方式,請在控制台啟動命令設定地區的options設定文字框輸入-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false。圖示為Open JDK 8運行環境下的Java應用。具體操作,請參見設定啟動命令sc_configure_a_startup_command_for_nacos

  • SAE內建服務註冊中心

    x6JeUmPTQf

    SAE提供Java微服務自動定址的Nacos Server能力,您可以通過SAE服務註冊發現功能配置。具體操作,請參見使用SAE內建Nacos註冊中心

步驟一:擷取Demo

eureka-service-provider和eureka-service-consumer是SAE提供的微服務Demo應用程式套件組合,二者均為已經接入Eureka的Spring Cloud應用。Consumer應用消費Provider應用提供的服務。

步驟二:修改Provider應用的服務註冊與發現配置

將雲原生的Provider應用託管到SAE中,需要在應用程式中修改pom依賴,並指定Nacos Server的IP地址。

說明

以下情況需要指定Nacos Server的IP地址:

  • 本地測試時,本地測試通過後再部署到SAE中。

  • SAE的服務註冊中心為自建的Nacos。

  1. 添加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

  2. 指定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檔案中增加所需配置。

  3. 查詢應用服務。

    1. 執行nacos-service-providerProviderApplicationmain函數,啟動應用。

    2. 登入本地啟動的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。

  1. 添加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

  2. 指定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檔案中增加所需配置。

  3. 查詢應用服務。

    1. 執行nacos-service-consumerConsumerApplicationmain函數,啟動應用。

    2. 登入本地啟動的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包。此外,您還可以選擇將該程式製作成鏡像並進行部署。

  1. 在應用的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>                        
  2. 將編譯好的Provider和Consumer應用程式套件部署至SAE。具體操作,請參見使用JAR包部署Java應用

    重要
    • SAE不支援建立空應用,因此第一次部署需在控制台完成。

    • 如果使用JAR包部署,在應用部署配置時選擇應用運行環境標準Java應用運行環境

    • 如果使用WAR包部署,在應用部署配置時應用運行環境apache-tomcat-XXX

    當您將應用部署到SAE時,SAE服務註冊中心以高優先順序自動化佈建Nacos Server服務端地址和服務連接埠,以及命名空間、AccessKey ID、AccessKey Secret等資訊,您無需進行任何額外的配置。對於原有的配置內容您可以保留或刪除。

步驟六:結果驗證

  1. 為Consumer應用綁定公網CLB,並在瀏覽器鍵入所設定的公網訪問地址,進入應用首頁。具體操作,請參見為應用綁定CLB並產生應用的公網或私網訪問IP

  2. 在應用首頁發起調用請求,然後登入SAE控制台,在左側導覽列,選擇應用管理 > 應用列表在頂部功能表列,選擇地區。

  3. 應用列表頁面,選擇Consumer應用,進入基本資料頁面。

  4. 在左側導覽列,選擇應用監控 > 應用總覽,查看服務調用資料總覽。

    如果能夠檢測到調用資料,則說明服務調用成功。

配置項參考

配置項

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

更多資訊

應用建立完成後,您可以對應用進行以下操作。

  • 預設情況下,用戶端無法從公網訪問應用,應用也無法主動訪問公網的資源或服務。如果您需要為應用配置網路訪問,請參見應用訪問

  • 更多操作,請參見營運管理