本地開發的Spring Cloud應用或者Dubbo應用託管到Serverless 應用引擎 SAE(Serverless App Engine)時,您可以使用SAE的註冊中心,也可以使用MSE託管的註冊中心。本文介紹如何搭建MSE的Nacos服務註冊中心,並將應用部署在SAE進行託管。
前提條件
背景資訊
某創業公司現在需要將微服務應用託管至SAE,期望使用MSE Nacos,不使用SAE內建註冊中心。
如果是叢集部署,請參見叢集部署說明。
當您的微服務應用較多時,註冊中心按推薦程度由高到低依次排序如下:
商業版的服務註冊中心(MSE Nacos)
自建服務註冊中心
SAE內建服務註冊中心
使用自建Nacos作為應用服務發現、組態管理等功能,您需要購買相應的資源進行搭建和維護,耗時耗力。使用MSE構建的Nacos叢集,您僅需關注Nacos的構建位置、版本、網路和規格,不必關注Nacos的構建和維護,更加聚焦業務本身的實現。
為了確保能夠正常串連MSE Nacos,建議使用2.2.2及以上的Nacos用戶端版本。如果使用2.2.2以下的版本,將會始終串連SAE內建註冊中心,從而導致無法串連MSE Nacos。
步驟一:購買並構建Nacos引擎
關於如何在MSE上為應用建立Nacos引擎的具體操作,請參見建立Nacos引擎。
購買的Nacos註冊中心,盡量與SAE應用使用同一個VPC,或者使用其他方式保持網路互連。
步驟二:服務註冊與發現
Nacos啟動後,服務註冊與發現功能需要在應用側指定服務註冊中心進行操作。應用程式執行後,系統會依據所設服務註冊中心,自動進行服務註冊與發現。
執行應用程式前,請確保您Nacos註冊中心的訪問連接埠(例如8848)已添加至您的安全性群組。
在服務應用側指定註冊中心,並運行Provider和Consumer應用。
分別開啟src\main\resources路徑下的application.properties檔案,指定Nacos Server的IP地址。
當使用MSE的Nacos註冊中心時,您可以登入MSE註冊配置中心管理主控台,在執行個體列表頁面,單擊目標執行個體。然後在目標執行個體的基礎資訊頁面,擷取註冊中心的內網地址。
Provider
修改前:
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=192.168.XX.XX:8848 # 替換為您購買的Nacos註冊中心的地址,例如mse:**********:8848。
Consumer
修改前:
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=192.168.XX.XX:8848 # 替換為您購買的Nacos註冊中心的地址,例如mse:**********:8848。
步驟三:應用託管至SAE
將本地服務Provider和Consumer應用程式編譯為WAR包、JAR包或者鏡像,部署到SAE並按需選擇以下方式串連Nacos。具體操作,請參見以下文檔:
方式一:佈建服務註冊發現
SAE提供Java微服務自動定址的Nacos Server能力,您可以通過SAE的服務註冊發現功能配置。具體操作,請參見使用SAE內建Nacos。
方式二:配置啟動參數
通過配置啟動參數的方式時,您需要確認以下內容。
確保SAE的網路與MSE 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
。圖示為Open JDK 8運行環境下的Java應用。具體操作,請參見設定啟動命令。
確保
-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
結果驗證
以Consumer應用為例,在基本資料頁面的執行個體部署資訊頁簽,在執行個體列表操作列,單擊Webshell,在Webshell視窗執行相關命令,驗證應用部署是否成功。更多資訊,請參見使用Webshell診斷應用。
驗證服務是否成功被註冊。
curl -X GET 'http://192.168.XX.XX:8848/nacos/v1/ns/instance/list?serviceName=service-provider'
service-provider
:服務名。192.168.XX.XX:8848
:安裝Nacos的主機IP地址和連接埠號碼。192.168.XX.XX
需替換成MSE Nacos註冊中心的內網地址。關於如何擷取,請參見步驟二:服務註冊與發現。
返回結果如下,表示服務登入成功。
驗證整個微服務應用的訪問鏈路是否正常。
按需選擇以下命令。
127.0.0.1:18082
為運行Provider和Consumer的主機IP地址和訪問連接埠。curl http://127.0.0.1:18082/echo-rest/{自訂變數}
curl http://127.0.0.1:18082/echo-feign/{自訂變數}
返回結果如下,表示Consumer應用已成功調用Provider應用,微服務應用的訪問鏈路正常。