如何整合服務匯流排與 RabbitMQ
在本指南中,我們將了解如何從 RabbitMQ 傳送訊息至服務匯流排。
以下是使用這些功能的一些案例:
- 邊緣設定:我們有一個邊緣設定,可將訊息傳送至 RabbitMQ,但我們想要將這些訊息轉送至 Azure 服務匯流排以進行進一步處理,以便我們使用許多 Azure 巨量資料功能。
- 混合式雲端:您的公司剛收購使用 RabbitMQ 滿足其傳訊需求的協力廠商。 他們位於不同的雲端上。 當他們轉換至 Azure 時,您就可以藉由將 RabbitMQ 與 Azure 服務匯流排橋接,來開始共用資料。
- 協力廠商整合:協力廠商使用 RabbitMQ 作為訊息代理程式,並想要將其資料傳送給我們,但他們在我們的組織外部。 我們可以提供 SAS 金鑰,讓他們存取一組有限的 Azure 服務匯流排佇列,以便他們轉送其訊息至其中。
這份清單還會繼續,但我們可以透過將 RabbitMQ 橋接至 Azure 來解決大部分的使用案例。
首先,您必須在這裡註冊,以建立免費的 Azure 帳戶
登入您的帳戶之後,請移至 Azure 入口網站並建立新的 Azure 服務匯流排命名空間。 命名空間是傳訊元件將存在的範圍容器,例如佇列和主題。
新增 Azure 服務匯流排命名空間
在 Azure 入口網站中,按一下大加號按鈕以新增資源
然後選取 [整合],並按一下 [Azure 服務匯流排] 以建立傳訊命名空間:
系統會提示您輸入命名空間資訊。 選取您要使用的 Azure 訂用帳戶。 如果您沒有資源群組,可以建立新的資源群組。
針對 Namespace name
使用 rabbitmq
(但也可以使用任何您想要的內容)。 然後為位置設定 East US
。 選擇 Basic
作為定價層。
如果一切順利,您應該會看到下列確認畫面:
然後回到 Azure 入口網站,您會看到新的 rabbitmq
命名空間已列在該處。 按一下以存取資源,然後您就可以將佇列新增至該資源。
建立我們的 Azure 服務匯流排佇列
現在您已擁有 Azure 服務匯流排命名空間,按一下左側的 Queues
按鈕 (在 Entities
下方),即可新增佇列:
佇列的名稱會是 from-rabbitmq
,就像是訊息的來源提醒一樣。 您可以將所有其他選項保留為預設值,但您也可以加以變更以符合應用程式的需求。
啟用 RabbitMQ Shovel 外掛程式
若要從 RabbitMQ 寄送訊息至 Azure 服務匯流排,我們將使用與 RabbitMQ 一起封裝的Shovel 外掛程式。 您可以使用下列命令來啟用外掛程式及其視覺化介面:
rabbitmq-plugins enable rabbitmq_shovel_management
您可能需要以 root 身分執行該命令。
現在是時候取得將 RabbitMQ 連線至 Azure 所需的認證。
將 RabbitMQ 連線至 Azure 服務匯流排
您必須為您的佇列建立共用存取原則 (SAS),讓 RabbitMQ 可以將訊息發佈至佇列。 SAS 原則可讓您指定可使用您資源的外部對象。 此概念是 RabbitMQ 能夠傳送訊息,但無法接聽或管理佇列。
點選 Send
方塊,然後按一下 Create
,讓 SAS 原則就緒。
建立原則之後,請按一下該原則以查看主要連接字串。 我們將使用此項目讓 RabbitMQ 與Azure 服務匯流排交談:
使用該連接字串之前,您必須先將其轉換成 RabbitMQ 的 AMQP 連線格式。 因此,請移至連接字串轉換器工具,然後將連接字串貼到表單中並按一下 [轉換]。 您將取得已可供 RabbitMQ 使用的連接字串。 (該網站會透過瀏覽器在本機中執行所有項目,因此您的資料不會透過網路傳送)。 您可以在 GitHub 上存取其原始程式碼。
現在,在瀏覽器 http://localhost:15672/#/dynamic-shovels
中開啟 RabbitMQ 管理外掛程式,並移至 Admin -> Shovel Management
,您可以在其中新增 Shovel,以負責將訊息從 RabbitMQ 佇列傳送至您的Azure 服務匯流排佇列。
在這裡呼叫您的 Shovel azure
,然後選擇 AMQP 0.9.1
作為來源通訊協定。 螢幕擷取畫面中有 amqp://
,這是將我們連線到本機 RabbitMQ 伺服器的預設 URI。 請務必將其調整為目前的部署。
在佇列端,您可以使用 azure
作為佇列的名稱。 如果該佇列不存在,RabbitMQ 會為您建立佇列。 您也可以選擇已存在的佇列名稱。 您可以將其他的選項保留為預設值。
然後在 destination
端選擇 AMQP 1.0
作為通訊協定。 在 URI
欄位中,輸入您從上一個步驟取得的連接字串 (您已將 Azure 連接字串轉換成 RabbitMQ 格式)。 其看起來應該如下:
amqps://rabbitmq-shovel:StringOfRandomChars@rabbitmq.servicebus.windows.net:5671/?sasl=plain
在 Address
欄位中,我們將輸入您 Azure 服務匯流排佇列的名稱,在此案例中稱為 from-rabbitmq
。 按一下 Add Shovel
,您的設定應該已準備好開始接收訊息。
將訊息從 RabbitMQ 發佈至 Azure 服務匯流排
在 RabbitMQ 管理介面中,我們可以移至 Queues
,選取 azure
佇列,然後搜尋 Publish message
面板。 此時會出現一個表單,讓您將訊息直接發佈至佇列。 在我們的範例中,我們會將 first message
新增為 Payload
,並叫用 Publish Message
:
返回至 Azure 並檢查您的佇列。 按一下左面板中的 Service Bus Explorer
,然後按一下 [瞄核] 按鈕。 如果一切順利,您會看到您的佇列現在有一則訊息。 恭喜!
但讓我們確定該訊息是您從 RabbitMQ 傳送的訊息。 選取 Peek
索引標籤,然後按一下 Peek
按鈕,以擷取佇列中的最後一則訊息。 按一下訊息以檢查其內容。 您應該會看到類似下圖的內容,其中會列出您的 first message
。
回顧
恭喜! 您已達成許多目標! 您已取得從 RabbitMQ 傳送到 Azure 服務匯流排的訊息,讓我們來回顧一下這些步驟:
- 建立 Azure 服務匯流排命名空間
- 將佇列新增至命名空間
- 將 SAS 原則新增至佇列
- 取得佇列連接字串
- 啟用 RabbitMQ shovel 外掛程式和管理介面
- 將 Azure 服務匯流排連接字串轉換成 RabbitMQ 的 AMQP 格式
- 將新的 Shovel 新增至 RabbitMQ 並將其連線至 Azure 服務匯流排
- 發佈訊息
藉由遵循先前的步驟,您已整合 Azure 外部的組織區域。 Shovel 外掛程式可讓您從 RabbitMQ 寄送訊息至 Azure 服務匯流排。 這具有極大的優點,因為您現在可以允許受信任的協力廠商將其應用程式與您的 Azure 部署連線。
最後,傳訊就是啟用連線,而透過這項技術,我們開啟了新的連線。
下一步
- 深入了解 Azure 服務匯流排
- 深入了解服務匯流排中的 AMQP 1.0 支援