RabbitMQ利用



💪 中に入ると…。


最近MSAを勉強している間に、MicroService間の通信を考えました.
そして,両者の通信を支援する中間エージェントとして機能するRabbitMQを理解した.
ここでは、RabbitMQについて簡単に説明します.データベースの変更など、複数のマイクロサービス間で情報を共有する必要があることがわかります.
この場合、直接通信するのではなく、通信エージェントを中間に配置して情報を共有できます.
エージェントは、送信するメッセージを受信します.通信先がオフラインの場合、エージェントはオンラインでメッセージを送信します.
△簡単に考えてみれば、メッセージキューのような感じでいいです.
サービス通信には、REST APIのような要求後待機応答と、RabbitMQのような要求後待機応答と、応答の到来時に応答を受信する2つの非同期方式があることに注意してください.

🐰 RabbitMQ準備完了



私はCloudAMPでRabbitMQを使ったことがあります.
△かわいい動物たちが印象的でした.
このサイトでは、実習用に無料のソウルバージョンのインスタンスを作成しました.
作成後は、インスタンスに入り、以下のAMP URLを使用するだけです.

🐹 Producer&Commerの作成


今回の実験の構造は,Dockerを用いて実行されたDjangoアプリケーションで生成されたメッセージがDockerを用いて実行されたFlashで受信されることを保証することを目的としている.

Producer


まず、Djangoアプリケーションでメッセージを送信するProducerを作成しました.

これらのコードをさらに説明すると、
paramsでは、上記のAMP URLをパラメータとして書いて接続します.
チャネルに接続チャネルを作成し、作成したpublish()を介してメッセージを渡します.
コードの作成が完了したら、ビューを表示します.pyとurls.pyを変更して、特定のURLを呼び出すときにpublish()関数を実行できます.

Consumer


次に、Flaskで着信メッセージを受信するConsumerを作成しました.

これらのコードをさらに説明すると、
チャネルへのコードは上の生産者と同じです.
channel.「queue declare」に、メッセージを受信するエージェント名をリストします.
その後、メッセージが受信されると、コールバック()関数が作成されます.
簡単な印刷コードを作成して実践しましたが、プロジェクトの方向に合わせて変更できます.
basic consumerを使用して、メッセージを受信する場所と、どのコールバック関数を使用するかを指定できます.

こうぞう


参考までに、構造について説明させていただきます.
生産者にとって、Djangoのアプリケーションごとに伝達する情報が異なり、エージェントを個別に設定できるため、特定のアプリケーションに存在する必要があります.
consumerの場合、ファイルをFlash全体に配置してメッセージを受信します.
もちろん、この構造に従う必要はありません.そのため、プロジェクトの状況を参考にして調整するだけでいいです.

🦝 通信実習


今、私たちは通信のために基本的な準備をしています.
以下に、通信を検証するための実践的な方法を示します.
  • Dockerを使用してDjangoとFlaskを実行します.
  • 次のコード
  • でFlask内部に入ります.
  • docker-compose exec backend sh
  • Flaskの内部で消費者を実行し、次のコードでメッセージを受信します.
  • python consumer.py
    適切なURLを
  • Djangoアプリケーションに接続することでpublish()関数を実行できます.
  • 上記の手順に従って実験を行うと、Flaskに次のメッセージが表示されます.