如何整合服務匯流排與 RabbitMQ

在本指南中,我們將了解如何從 RabbitMQ 傳送訊息至服務匯流排。

以下是使用這些功能的一些案例:

  • 邊緣設定:我們有一個邊緣設定,可將訊息傳送至 RabbitMQ,但我們想要將這些訊息轉送至 Azure 服務匯流排以進行進一步處理,以便我們使用許多 Azure 巨量資料功能
  • 混合式雲端:您的公司剛收購使用 RabbitMQ 滿足其傳訊需求的協力廠商。 他們位於不同的雲端上。 當他們轉換至 Azure 時,您就可以藉由將 RabbitMQ 與 Azure 服務匯流排橋接,來開始共用資料。
  • 協力廠商整合:協力廠商使用 RabbitMQ 作為訊息代理程式,並想要將其資料傳送給我們,但他們在我們的組織外部。 我們可以提供 SAS 金鑰,讓他們存取一組有限的 Azure 服務匯流排佇列,以便他們轉送其訊息至其中。

這份清單還會繼續,但我們可以透過將 RabbitMQ 橋接至 Azure 來解決大部分的使用案例。

首先,您必須在這裡註冊,以建立免費的 Azure 帳戶

登入您的帳戶之後,請移至 Azure 入口網站並建立新的 Azure 服務匯流排命名空間。 命名空間是傳訊元件將存在的範圍容器,例如佇列和主題。

新增 Azure 服務匯流排命名空間

在 Azure 入口網站中,按一下大加號按鈕以新增資源

Create resource

然後選取 [整合],並按一下 [Azure 服務匯流排] 以建立傳訊命名空間:

Select Azure Service bus

系統會提示您輸入命名空間資訊。 選取您要使用的 Azure 訂用帳戶。 如果您沒有資源群組,可以建立新的資源群組。

Create namespace

針對 Namespace name 使用 rabbitmq (但也可以使用任何您想要的內容)。 然後為位置設定 East US。 選擇 Basic 作為定價層。

如果一切順利,您應該會看到下列確認畫面:

Create namespace confirmation

然後回到 Azure 入口網站,您會看到新的 rabbitmq 命名空間已列在該處。 按一下以存取資源,然後您就可以將佇列新增至該資源。

Resource list with new namespace

建立我們的 Azure 服務匯流排佇列

現在您已擁有 Azure 服務匯流排命名空間,按一下左側的 Queues 按鈕 (在 Entities 下方),即可新增佇列:

Create queue

佇列的名稱會是 from-rabbitmq,就像是訊息的來源提醒一樣。 您可以將所有其他選項保留為預設值,但您也可以加以變更以符合應用程式的需求。

啟用 RabbitMQ Shovel 外掛程式

若要從 RabbitMQ 寄送訊息至 Azure 服務匯流排,我們將使用與 RabbitMQ 一起封裝的Shovel 外掛程式。 您可以使用下列命令來啟用外掛程式及其視覺化介面:

rabbitmq-plugins enable rabbitmq_shovel_management

您可能需要以 root 身分執行該命令。

現在是時候取得將 RabbitMQ 連線至 Azure 所需的認證。

將 RabbitMQ 連線至 Azure 服務匯流排

您必須為您的佇列建立共用存取原則 (SAS),讓 RabbitMQ 可以將訊息發佈至佇列。 SAS 原則可讓您指定可使用您資源的外部對象。 此概念是 RabbitMQ 能夠傳送訊息,但無法接聽或管理佇列。

Add SAS Policy

點選 Send 方塊,然後按一下 Create,讓 SAS 原則就緒。

建立原則之後,請按一下該原則以查看主要連接字串。 我們將使用此項目讓 RabbitMQ 與Azure 服務匯流排交談:

Get SAS Policy

使用該連接字串之前,您必須先將其轉換成 RabbitMQ 的 AMQP 連線格式。 因此,請移至連接字串轉換器工具,然後將連接字串貼到表單中並按一下 [轉換]。 您將取得已可供 RabbitMQ 使用的連接字串。 (該網站會透過瀏覽器在本機中執行所有項目,因此您的資料不會透過網路傳送)。 您可以在 GitHub 上存取其原始程式碼。

Convert connection string

現在,在瀏覽器 http://localhost:15672/#/dynamic-shovels 中開啟 RabbitMQ 管理外掛程式,並移至 Admin -> Shovel Management,您可以在其中新增 Shovel,以負責將訊息從 RabbitMQ 佇列傳送至您的Azure 服務匯流排佇列。

Add RabbitMQ Shovel

在這裡呼叫您的 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

Publish first message

返回至 Azure 並檢查您的佇列。 按一下左面板中的 Service Bus Explorer,然後按一下 [瞄核] 按鈕。 如果一切順利,您會看到您的佇列現在有一則訊息。 恭喜!

Azure Service Bus Queue

但讓我們確定該訊息是您從 RabbitMQ 傳送的訊息。 選取 Peek 索引標籤,然後按一下 Peek 按鈕,以擷取佇列中的最後一則訊息。 按一下訊息以檢查其內容。 您應該會看到類似下圖的內容,其中會列出您的 first message

Queue peek

回顧

恭喜! 您已達成許多目標! 您已取得從 RabbitMQ 傳送到 Azure 服務匯流排的訊息,讓我們來回顧一下這些步驟:

  1. 建立 Azure 服務匯流排命名空間
  2. 將佇列新增至命名空間
  3. 將 SAS 原則新增至佇列
  4. 取得佇列連接字串
  5. 啟用 RabbitMQ shovel 外掛程式和管理介面
  6. 將 Azure 服務匯流排連接字串轉換成 RabbitMQ 的 AMQP 格式
  7. 將新的 Shovel 新增至 RabbitMQ 並將其連線至 Azure 服務匯流排
  8. 發佈訊息

藉由遵循先前的步驟,您已整合 Azure 外部的組織區域。 Shovel 外掛程式可讓您從 RabbitMQ 寄送訊息至 Azure 服務匯流排。 這具有極大的優點,因為您現在可以允許受信任的協力廠商將其應用程式與您的 Azure 部署連線。

最後,傳訊就是啟用連線,而透過這項技術,我們開啟了新的連線。

下一步