0

RabbitMQ を初めて使用するので、オフラインのターゲット ノードをどのように処理するかを考えていました。

例として、このシナリオ:

  • ログを永続ストレージに保存する 1 つのログ記録アプリケーション
  • ログ記録サーバーを介してログを永続ストレージに書き込む N ログ公開アプリケーション。

次の 2 つのオプションがあります。

  1. 各パブリッシング アプリケーションは、ログ メッセージをローカルの RabbitMQ インスタンスにパブリッシュし、ログ記録サーバーはこれらのそれぞれにサブスクライブする必要があります。
  2. ログ記録アプリケーションには、各ログ発行アプリケーションがメッセージを配信するローカルの RabbitMQ インスタンスがあります。

オプション 1 では、新しいアプリケーションが表示されるか移動するたびに、記録アプリケーションを再構成/再コーディング/通知する必要があります。したがって、オプション 2 が正しいと思います。新しいパブリッシング アプリケーションはそれぞれ、記録アプリケーションの RabbitMQ ノードに書き込むだけです。

私が苦労しているのは、録音アプリケーションの Node がダウンした状況にどう対処するかということだけです。オンラインに戻るまでメッセージを保存する独自のシステムを構築する必要がありますか?それとも、RabbitMQ の機能を使用して対処できますか? つまり、各パブリッシング アプリケーションのローカルの RabbitMQ は、メッセージを受信し、オンラインに戻ったらすぐに記録アプリケーションの RabbitMQ に転送できますか?

Federated プラグインについて、それが解決策かどうか理解できないことがわかりました。ターゲットノードがオフラインのときにメッセージをキューに入れるために、別の何かが必要になるか、独自のローカルキューシステムを作成する必要があるかもしれません (必要がないことを願っています)。

アーキテクチャの例やソリューションへのリンクは大歓迎です。

ところで: https://groups.google.com/forum/#!topic/easynetq/nILIKSjxyMgは、アプリケーションごとに RabbitMQ ノードをインストールするべきではないと述べているので、MSQM や ZeroMQ などに頼る必要があるかもしれません (?)

4

1 に答える 1

1

同様の状況のように聞こえる経験から、オフラインのときにキュー以外のものを使用してメッセージをローカルに保存することをお勧めします。

何年も前に、私はオフラインで作業しなければならないシステムを構築しました。ネットワーク接続はまったくなく、ラップトップがオフィスに持ち帰られたときに、メッセージ キューを介して中央サーバーにメッセージをプッシュする必要がありました。

メッセージ キューが利用できないときに、ローカル データベース (当時は sqlite) を使用してメッセージを保存することで、これを解決しました。

同様のことを行う必要があります。RabbitMQ がオフラインの場合は、ローカル データベースまたはプレーン テキスト ファイルや CSV ファイルを使用してメッセージを保存します。再接続したら、ローカル ファイル システムからメッセージを読み取り、RabbitMQ 経由で送信します。

これは、RabbitMQ がオフラインになることが予想されない場合でも、使用するのに適した戦略です。率直に言って、ある時点でオフラインになり、対処する必要があります。そのような状況に備える必要があり、メッセージ用のローカル ストアを用意しておくと役立ちます。

...

アプリケーションごとの rqm ノードについて: 悪い考えです。これにより、システムが非常に複雑になります。できるだけ少ないRabbitMQノードが必要です。つまり、可能な場合はシステム (多くのアプリケーションで構成されるシステム) ごとに 1 つです... 可用性のための RabbitMQ クラスターを除いて - しかし、それは完全に別の問題と設計です。

...

私は、Aria Stewart に、RabbitMQ とメッセージング システムの障害に対する設計についてインタビューを行い、ネットワークがどのように失敗するかについて彼女が話している部分を少し抜粋しました。

重要なのは、ネットワークまたは RabbitMQ などに障害が発生し、RabbitMQ がオンラインに戻ったときに回復できるように、ローカル データストアのようなソリューションが必要になるということです。

于 2015-07-29T15:54:47.707 に答える