本文介紹如何在Serverless 應用引擎 SAE(Serverless App Engine)上基於阿里雲雲訊息佇列 RocketMQ 版實現環境隔離,您可以在不修改任何業務代碼的情況下,實現非同步情境下的流量控制。
背景資訊

支援RocketMQ版本:4.2.0及以上版本。
支援Pull和Push兩種模式。
需要在服務端配置
enablePropertyFilter=true並重啟服務端。
準備工作
部署SAE Demo應用
下載Demo。
部署主幹鏈路應用。
部署主幹鏈路應用(A、B、C)。具體操作,請參見將應用的服務註冊與發現中心更改為Nacos。
部署灰階鏈路應用(A-gray、B-gray、C-gray),在啟動命令中添加啟動參數
-Dalicloud.service.tag=gray用於區別主幹鏈路應用。
部署時,如果需要使用獨立的註冊中心,需要添加啟動參數-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false。
部署RocketMQ
訊息的生產者和訊息的消費者,需要同時開啟RocketMQ訊息灰階,訊息的灰階功能才會生效。訊息類型目前只支援RocketMQ,包含開源版本(Apache RocketMQ)和阿里雲商業版(雲訊息佇列 RocketMQ 版)。
如果您使用開源RocketMQ,則RocketMQ Server和RocketMQ Client都需要使用4.5.0及以上版本。更多資訊,請參見Apache RocketMQ。
如果您使用阿里雲雲訊息佇列 RocketMQ 版,需要使用鉑金版,且Ons Client使用1.8.0.Final及以上版本。更多資訊,請參見快速入門概述。
開啟RocketMQ訊息灰階後,訊息的Consumer Group會被修改。例如原來的Consumer Group為
group1,環境標籤為gray,開啟RocketMQ訊息灰階後,則group會被修改成group1_gray,如果您使用的是阿里雲雲訊息佇列 RocketMQ 版 ,請提前建立好Group。預設使用SQL92的過濾方式,如果您使用開源RocketMQ,需要在服務端開啟SQL92過濾功能(即在
broker.conf中配置enablePropertyFilter=true)。
步驟一:為應用開啟RocketMQ訊息灰階
Demo中的spring-cloud-c、spring-cloud-a應用分別為訊息的生產者和消費者,通過添加啟動參數-Dprofiler.micro.service.mq.gray.enable=true,在SAE上為其開啟RocketMQ訊息灰階。
RocketMQ訊息灰階功能的開啟和關閉,需要在SAE控制台重新部署應用後才會生效。
步驟二:引入流量並進行驗證
Demo應用的結構圖如下,應用之間的調用,既包含了Spring Cloud的調用,也包含了Dubbo的調用,覆蓋了當前市面上最常用的兩種微服務架構。其中C應用會生產出RocketMQ訊息,由A應用進行消費,A應用在消費訊息時,也會發起新的調用。這些應用都是基礎的Spring Cloud、Dubbo和RocketMQ的標準用法。

Demo的調用鏈路為:spring-cloud-zuul應用在收到/A/dubbo的請求時,會把請求轉寄給spring-cloud-a,然後spring-cloud-a通過Dubbo協議去訪問spring-cloud-b,spring-cloud-b也通過Dubbo協議去訪問spring-cloud-c,spring-cloud-c在收到請求後,會生產一個訊息,並返回自己的環境標籤和IP地址。這些生產出來的訊息會由spring-cloud-a應用消費,spring-cloud-a應用在消費訊息的時候,會通過spring cloud去調用spring-cloud-b,spring-cloud-b進而通過spring cloud去調用spring-cloud-c,並且將結果輸出到自己的日誌中。
#訪問/A/dubbo的時候
#傳回值為A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx]
#同時,A應用在接收到訊息之後,輸出的日誌如下:
c.a.mse.demo.service.MqConsumer: topic:TEST_MQ,producer:C[10.25.xx.xx],invoke result:A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx]您可以登入SAE控制台,查看spring-cloud-a應用的日誌並驗證配置。基準環境可以同時消費灰階(gray)和基準(base)環境生產出來的訊息,而且在消費對應環境訊息時產生的Spring Cloud調用分別路由到灰階(gray)和基準(base)環境中。