Service Bus を RabbitMQ を統合する方法
このガイドでは、RabbitMQ から Service Bus にメッセージを送信する方法について説明します。
これらの機能は、次のようなシナリオで利用できます。
- エッジ セットアップ:RabbitMQ にメッセージを送信しているエッジ セットアップがありますが、これらのメッセージをさらに処理するために Azure Service Bus に転送して、Azure ビッグ データ機能の多くを利用できるようにしたいと考えています。
- ハイブリッド クラウド:あなたの会社が最近買収したサード パーティは、メッセージングのニーズに RabbitMQ を使用しています。 彼らは別のクラウドを使用しています。 RabbitMQ から Azure Service Bus にブリッジすることで、Azure への移行と同時にデータの共有を開始できます。
- サード パーティの統合:RabbitMQ をブローカーとして使用している組織外のサード パーティからデータを受け取る必要があります。 彼らに SAS キーを提供し、Azure Service Bus キューの限られたセットへのアクセスを許可することで、そこにメッセージを転送してもらうことができます。
このリストはさらに続きますが、これらのユース ケースのほとんどは、RabbitMQ を Azure にブリッジして解決できます。
最初に、ここでサインアップして、無料の Azure アカウントを作成する必要があります。
アカウントにサインインしたら、Azure portal にアクセスし、新しい Azure Service Bus 名前空間を作成します。 名前空間は、キューやトピックなどのメッセージング コンポーネントが存在するスコープ コンテナーです。
新しい Azure Service Bus 名前空間を追加する
Azure portal で、大きいプラス ボタンをクリックして新しいリソースを追加します。
次に、[統合] を選択し、[Azure Service Bus] をクリックして、メッセージング名前空間を作成します。
名前空間の情報を入力するように求められます。 使用する Azure サブスクリプションを選択します。 リソース グループがない場合は、新しいものを作成できます。
[Namespace name
] には [rabbitmq
] を使用しますが、任意のものを指定できます。 次に、場所を [East US
] に設定します。 価格レベルとして [Basic
] を選択します。
すべてを正しく設定すると、次のような確認画面が表示されます。
Azure portal に戻ると、新しい rabbitmq
名前空間が一覧に表示されています。 これをクリックしてリソースにアクセスし、キューを追加します。
Azure Service Bus キューを作成する
Azure Service Bus 名前空間が用意できたので、左側の [Entities
] の下にある [Queues
] ボタンをクリックして、新しいキューを追加します。
メッセージの送信元がわかるように、キューの名前は「from-rabbitmq
」になります。 その他のオプションはすべて既定値のままでかまいませんが、ご自分のアプリのニーズに合わせて変更することもできます。
RabbitMQ Shovel プラグインを有効にする
RabbitMQ から Azure Service Bus にメッセージを配信するには、RabbitMQ のパッケージに含まれている Shovel プラグインを使用します。 次のコマンドを使用して、プラグインとそのビジュアル インターフェイスを有効にすることができます。
rabbitmq-plugins enable rabbitmq_shovel_management
必要に応じて、このコマンドは root として実行します。
次に、RabbitMQ を Azure に接続するために必要な資格情報を取得します。
RabbitMQ を Azure Service Bus に接続する
キューの共有アクセス ポリシー (SAS) を作成する必要があります。これにより、RabbitMQ がメッセージをそのキューに発行できるようになります。 SAS ポリシーでは、外部パーティに対して実行を許可する、リソースでの操作を指定できます。 たとえば、RabbitMQ に対してメッセージの送信を許可し、キューのリッスンや管理は許可しないといった指定が可能です。
[Send
] ボックスをオンにした後、[Create
] をクリックして SAS ポリシーを設定します。
ポリシーが作成されたら、それをクリックしてプライマリ接続文字列を確認します。 これを使用して、RabbitMQ が Azure Service Bus と通信できるようにします。
この接続文字列を使用するには、RabbitMQ の AMQP 接続形式に変換する必要があります。 接続文字列変換ツールにアクセスし、接続文字列をフォームに貼り付けて、[変換] をクリックします。 RabbitMQ に対応した接続文字列が表示されます (この Web サイトでは、ローカルのブラウザー内ですべての処理が行われます。入力したデータがネットワーク経由で送信されることはありません)。 ソース コードには GitHub でアクセスできます。
次に、ブラウザーで RabbitMQ 管理プラグインを開き (http://localhost:15672/#/dynamic-shovels
)、[Admin -> Shovel Management
] に移動します。ここで、RabbitMQ キューから Azure Service Bus キューへのメッセージ送信を処理する新しい Shovel を追加できます。
ここでは、azure
という Shovel を呼び出し、ソース プロトコルとして [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 Service Bus キューの名前を入力します。この例では「from-rabbitmq
」です。 [Add Shovel
] をクリックすると、セットアップでメッセージの受信を開始する準備が整います。
RabbitMQ から Azure Service Bus へのメッセージの発行
RabbitMQ Management インターフェイスで、[Queues
] にアクセスし、[azure
] キューを選択して、[Publish message
] パネルを検索します。 フォームが表示され、そこからキューに直接メッセージを発行することができます。 この例では、[Payload
] に「first message
」を追加して [Publish Message
] をクリックします。
Azure に戻り、キューを調べます。 左のパネルで Service Bus Explorer
をクリックし、 [クイック表示する] ボタンをクリックします。 何も問題がなければ、キューにメッセージが 1 つ表示されます。 おめでとうございます!
念のため、メッセージが RabbitMQ から送信されたものであることを確認しましょう。 [Peek
] タブを選択し、[Peek
] ボタンをクリックして、キュー内の最後のメッセージを取得します。 メッセージをクリックして、内容を確認します。 次の画像のように、first message
が一覧に表示されます。
まとめ
おめでとうございます! これで完了です。 RabbitMQ から Azure Service Bus にメッセージを送信することができました。手順をおさらいしましょう。
- Azure Service Bus 名前空間を作成する
- 名前空間にキューを追加する
- SAS ポリシーをキューに追加する
- キューの接続文字列を取得する
- RabbitMQ Shovel プラグインと管理インターフェイスを有効にする
- Azure Service Bus 接続文字列を RabbitMQ の AMQP 形式に変換する
- 新しい Shovel を RabbitMQ に追加し、それを Azure Service Bus に接続する
- メッセージを発行する
上記の手順に従って、Azure の外部にある組織の領域を統合しました。 Shovel プラグインを使用することで、RabbitMQ から Azure Service Bus にメッセージを送信できました。 信頼されたサード パーティがアプリを Azure デプロイに接続できるようになったため、これには非常に大きな利点があります。
最後に、メッセージングとは接続を可能にすることであり、この手法によって新しい接続が開かれました。
次の手順
- Azure Service Bus の詳細
- 詳細については、「Service Bus での AMQP 1.0 サポート」を参照してください。