在使用開源RabbitMQ叢集時,當您希望能夠解決各種穩定性痛點(例如訊息堆積、腦裂等問題)、實現高並發、分布式、靈活擴縮容時,您可以將開源RabbitMQ叢集遷移至雲訊息佇列 RabbitMQ 版,本文介紹遷移上雲的前提條件、操作步驟、注意事項等。
遷移前須知
雲訊息佇列 RabbitMQ 版是阿里雲基於專有的分布式訊息儲存技術開發的進階訊息佇列服務。它嚴格遵循AMQP 0-9-1協議,但並不是開源RabbitMQ的簡單託管版本。雲訊息佇列 RabbitMQ 版的架構有效避免了因訊息積壓導致的記憶體流失和伺服器故障等穩定性問題,並成功解決了分布式系統中的腦裂難題。此外,它還提供了高度的延展性和靈活的隨用隨付模式,進一步增強了服務的彈性、降低了成本。
然而,與開源RabbitMQ相比,雲訊息佇列 RabbitMQ 版在某些功能實現上存在差異。因此,在考慮遷移至雲訊息佇列 RabbitMQ 版之前,您需要進行技術能力和成本效益評估,以確保選型符合您的需求。
遷移前評估
技術評估
雲訊息佇列 RabbitMQ 版和開源RabbitMQ在功能、服務和效能、Exchange和Queue等幾個方面存在差異,在遷移至雲訊息佇列 RabbitMQ 版之前,請查看差異項並評估雲訊息佇列 RabbitMQ 版的功能是否符合您的預期。具體差異點,請參見開源對比。
雲訊息佇列 RabbitMQ 版對叢集、介面調用以及字元進行了限制,在使用時不能超過相應的限制值,在遷移之前,請評估限制值是否能滿足您的業務要求。更多資訊,請參見執行個體類型
費用評估
雲訊息佇列 RabbitMQ 版提供了預付費系列執行個體和Serverless系列執行個體,涵蓋多種執行個體規格。不同執行個體規格間的差異,請參見執行個體類型。
相比預付費系列執行個體,Serverless系列執行個體具備更好的彈效能力和費用優勢。計費規則,請參見Serverless系列計費說明。
開源RabbitMQ叢集的訊息收發次數、Queue數量及訊息量可通過如下途徑評估。
Queue數量:在開源RabbitMQ控制台上的Overview頁面查看Global counts,擷取Queues、Exchanges等各個中繼資料的數量。

訊息收發次數、訊息量:
方法一:在開源RabbitMQ控制台上的Overview頁面查看Message rates,計算Publish、Deliver(manual ack)/Deliver (auto ack)、Redelivered指標的總和。

方法二:通過Prometheus Grafana大盤查看叢集總的訊息寫入和訊息流程出的QPS和訊息量。
遷移上雲
遷移中繼資料
遷移中繼資料是指將開源RabbitMQ叢集的中繼資料匯出,並將其匯入到阿里雲雲訊息佇列 RabbitMQ 版執行個體。雲訊息佇列 RabbitMQ 版會根據成功匯入的中繼資料在目標雲訊息佇列 RabbitMQ 版執行個體中建立對應的Vhost、Queue、Exchange、Binding,實現RabbitMQ叢集中繼資料遷移上雲。詳細步驟,請參見遷移中繼資料上雲。
建立使用者名稱、密碼並授權
開源用戶端訪問雲訊息佇列 RabbitMQ 版服務端時,需要傳入使用者名稱和密碼進行許可權認證,認證通過才允許訪問服務端。不同於開源RabbitMQ中自訂使用者名稱密碼的方式,雲訊息佇列 RabbitMQ 版的使用者名稱和密碼可通過阿里雲存取控制(RAM)的AccessKey和AccessKey Secret產生。詳細資料,請參見靜態使用者名稱密碼管理。
打通網路
雲訊息佇列 RabbitMQ 版提供私網串連存取點,使用私網串連存取點能夠支援雲企業網(CEN)上雲組網,詳情請參見私網串連存取點。
遷移訊息資料
遷移方案
以VirtualHost為最小遷移單位,使用Shovel外掛程式遷移訊息資料
方案優勢
平滑遷移業務,資料不丟失。
無需梳理應用間調用的網狀拓步結構。
不需要逐個遷移生產者和消費者的調用鏈路,解決環形調用鏈路等的遷移問題。
遷移步驟
梳理出VirtualHost A的所有生產者和消費者。
遷移VirtualHost A下所有的生產者和消費者,即修改URL、使用者名稱、密碼配置使其訪問雲訊息佇列 RabbitMQ 版服務。
觀察開源RabbitMQ叢集中,VirtualHost A下所有隊列的堆積情況。
在開源叢集中開啟Shovel外掛程式,將有訊息堆積的隊列配置Shovel臨時遷移同步任務sync a,將堆積的訊息轉寄到雲訊息佇列 RabbitMQ 版執行個體。這裡將開源叢集中的隊列設定為同步任務的源,雲訊息佇列 RabbitMQ 版執行個體的隊列設定為同步任務的目標。
如果在開源叢集中,VirtualHost A有來自其它VirtualHost B的Shovel同步任務sync B,則需要將同步任務sync B的目標設定為雲訊息佇列 RabbitMQ 版執行個體的隊列。
觀察開源叢集VirtualHost A下的隊列是否有訊息堆積,當堆積的訊息全部被遷移至雲上執行個體後,刪除臨時遷移同步任務sync a。
以上步驟完成了最小遷移單元VirtualHost A的遷移,剩餘的VirtualHost都可以按照最小遷移單元遷移。
相關文檔
更多關於Shovel外掛程式的資訊,請參見Shovel Plugin。