0

同一のキュー名とルーティングキー値を使用してすべてが直接交換に接続されている、N個のサブスクライバーの層について考えてみます。これにより、インバウンドメッセージがサブスクライバーの1つにラウンドロビンで送信される負荷分散システムが作成されます。これは、負荷が増加するにつれてサブスクライバーを追加したり、必要に応じて後で撤回したりできるため、スケールアウトの問題に対処する場合に非常に効果的です。

次に、その層のすべてのサブスクライバーにメッセージを送信できるようにするための要件を検討します(たとえば、「状態をリセットしてください」または「今すぐシャットダウンしてください」という管理メッセージ)。このことをrabbitmqで行う方法はありますか?これが不可能な場合、より良いアプローチはありますか?

私の環境はamqplibを使用したPythonです。

4

1 に答える 1

2

私が正しく理解している場合、これはあなたのセットアップです:

  • 直接取引所に発行するプロデューサーがいます。
  • その交換にバインドされたキューがあります。
  • 多くのサブスクライバーがいて、すべて上記のキューから消費しています。

これは、任意のサブスクライバーにメッセージを送信するのに完全に機能します (したがって、一種の負荷分散) が、すべてのサブスクライバーにいくつかのメッセージを送信できるようにする必要があります。

ファンアウト交換と各サブスクライバーの追加のキューを使用してこれを行うことができます。

  • プロデューサーは、システム全体のメッセージをファンアウト交換に発行します。
  • その交換にバインドされた各サブスクライバーのキューがあります。
  • 各サブスクライバーは、最初にこのキューからの消費を試みます。成功しない場合は、現在使用している共通キューから消費しようとします。
于 2010-07-01T09:48:28.510 に答える