如果您在使用金絲雀發布、全鏈路灰度以及開發環境隔離等場景中需要使用到消息的灰度,那么您需要開啟消息灰度的功能。目前,MSE只支持RocketMQ類型的消息灰度。
背景信息
雖然絕大多數業務場景下對于消息的灰度的要求并不像RPC的要求得這么嚴格,但是在以下兩個場景中,還是會對消息的全鏈路有一定的訴求。
當消息的消費邏輯進行了修改時,這時候希望通過小流量的方式來驗證新的消息消費邏輯的正確性,這時會對消息的灰度有訴求。
在消息消費時,可能會產生新的RPC調用,如果沒有在消息這一環去遵循之前設定好的全鏈路流量控制的規則,會導致通過消息產生的這部分流量“逃逸”,從而導致全鏈路灰度的規則遭到破壞,導致出現不符合預期的情況。
使用說明
使用此功能您無需修改應用的代碼和配置。
消息類型目前只支持RocketMQ,包含開源版本和阿里云商業版。
如果您使用開源RocketMQ,則RocketMQ Server和RocketMQ Client都需要使用4.5.0及以上版本。
如果您使用阿里云RocketMQ 4.x 系列,需要使用鉑金版,RocketMQ 5.x 系列無版本要求。Ons Client使用1.8.0.Final及以上版本。
消息的生產者和消息的消費者,需要同時開啟消息灰度,消息的灰度功能才能生效。
開啟消息灰度后,MSE會修改消息的Consumer Group。例如原來的Consumer Group為
group1
,環境標簽為gray,開啟消息灰度后,則group1
會被修改成group1_gray
,如果您使用的是阿里云RocketMQ ,請提前創建好group1
。默認使用SQL92的過濾方式,如果您使用的是開源RocketMQ,開源的RocketMQ Server端需要支持SQL92過濾,且在服務端開啟此功能(即在broker.conf中配置
enablePropertyFilter=true
)。說明如果您的應用場景不滿足支持SQL92過濾的條件,那么可以使用通過FilterMessageHook在消費者過濾的方式,此方式需要在所有的應用中打開消息灰度并且選擇客戶端過濾方式。因為消費者過濾的方式會在每個環境都處理全量的消息,對消息的生產者和消費者壓力都比較大,不推薦在生產中使用此模式。
開啟消息灰度
登錄MSE治理中心控制臺,并在頂部菜單欄選擇地域。
在左側導航欄,選擇治理中心 > 應用治理。
在應用列表頁面,單擊目標應用的資源卡片,然后在左側導航欄單擊流量治理。
在流量治理頁面,單擊消息灰度頁簽。
在未打標環境忽略的標簽右側單擊編輯,打開開啟消息灰度右側的開關,然后單擊確定。
如果您不希望未打標環境消費其他環境生產出來的消息,請在未打標環境忽略的標簽中選擇需要忽略的標簽。
如果您希望基線環境能夠智能地識別其他環境是否存在消費者,在不存在消費者時消費對應環境的消息,在存在消費者時忽略對應環境的消息,請在未打標環境忽略的標簽中輸入自動識別。
說明應用在開啟消息灰度后,需要重啟才能生效。
未打標環境忽略的標簽支持動態生效,不需要重啟應用。
當消息的生產者和消費者都開啟消息灰度,并且都重啟生效之后。消息消費者的行為如下:
未打標的環境節點默認會消費所有環境生產出來的消息。
打標環境節點只消費在相同標簽環境生產出來的消息。