全部產品
Search
文件中心

Serverless App Engine:開發情境:基於訊息佇列RocketMQ版實現環境隔離

更新時間:Mar 06, 2025

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

背景資訊

dg_rocket_mq_workflow

  • 支援RocketMQ版本:4.2.0及以上版本。

  • 支援Pull和Push兩種模式。

  • 需要在服務端配置enablePropertyFilter=true並重啟服務端。

準備工作

部署SAE Demo應用

  1. 下載Demo

  2. 部署主幹鏈路應用。

    部署主幹鏈路應用(A、B、C)。具體操作,請參見將應用的服務註冊與發現中心更改為Nacos

  3. 部署灰階鏈路應用(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的標準用法。

dg_implement_end_to_end_canary_release_via_rocket_mq

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)環境中。