3

nodeJSサーバーで使用されるrabbitMQがインストールされています。私は rabbit.js ライブラリを使用してウサギとやり取りしていますが、これまでのところ満足しています。

ファンアウトモードで同じキューに複数のサブスクライバーを取得しました。各ノードはサブスクライバーであり、パブリッシャーでもあります。これは私にとっては良いことであり、正常に動作します。発生した更新についてすべてのサーバーに通知したい状況がたくさんあるためです。それらのノードの1つ(パブリッシャーでもあります...)

私は、メッセージを送信した人 (同じキューのリスナーでもある) を除いて、キューのすべてのリスナーにメッセージを送信する必要がある場合に遭遇しました。

誰がリッスンしているか事前にわからないため (単一の場合もあれば、数百万の場合もあります)、ホワイトリスト ルート ルールによって特定のノードにルーティングすることはできません。それはある種の除外ワイルドカード ルーティング ルール (ブラックリスト) である必要があります。

rabbit.js を使用して実行できますか? どういうわけかrabbitmqでそれを行うことさえできますか?

私はうさぎをあまり知らないので、優しくしてください :)

ところで、rabbit.js を使用してそれを行う方法を知っていれば、さらに良い...

編集::

Derick Bailey のリクエストによると、これが必要な理由です。

webServicesとして動作する負荷分散されたnodeJSサーバーが多数あるシステムがあります。それらは互いに完全に透過的です。他のノードが存在するかどうかは誰も知りません。この分離により、他の「並列」ノードを追加および削除するだけで、より簡単にスケーリングできるため、この方法を維持したいと思います。

これらの各ノードには、独自のインメモリ ローカル キャッシュ サービスがあります。そして、単一のノードがエンティティを更新する状況に遭遇しました。次に、このノードが他のすべての並列ノード (キャッシュ内に同じエンティティを持つ可能性がある) に通知して無効化できるようにする必要があります。

問題は、メッセージを送信するノード (更新ノード) もメッセージを受信することです。これは、彼がリスナーでもあるためです。だから私は彼にその特定のメッセージの受信者リストから何らかの形で自分自身を除外してもらいたい... したがって、ルーティングブラックリストが必要です。(彼は自分自身を知っているので、彼自身のIDを除くすべての人にルーティングすることができます...しかし、彼は誰かが実際に相手側で聞いているかどうかさえ知りません...したがって、それは間違いなくホワイトリストにはなりません)

私の必要性が今より明確になることを願っています。

私はすでに私の問題の解決策を考えていましたが、それには私の側で追加の開発が必要であり、ウサギの現在の能力を使用してそれを回避したいと考えています (可能な場合) コンテンツに一意の ID を追加するだけですメッセージの。送信ノードは、このメッセージが自分からのものであることを認識し、そのメッセージを無視できます。しかし、明らかに理解できるように、失敗する可能性のある追加の落とし穴やその他のエッジケースを考慮する必要があるため、これは扱いにくいものになる可能性があります...

誰かがウサギの既存の構成を使用してそれを行う方法を教えてくれれば、私はその方法を聞いてうれしいです:)

4

2 に答える 2

1

これは可能であるはずですが、少し難しいかもしれませんし、現在行っているものとは異なるセットアップが必要になるかもしれません。

ファンアウト交換を使用すると、バインドされているすべてのキューがメッセージを受信することになります。一部のキューがメッセージを受信しないようにする必要がある場合、ファンアウトはおそらく悪い考えです。

ただし、これは送信されるメッセージに大きく依存します。別の方法で処理する必要がある特定のタイプのメッセージがある場合は、そのタイプのメッセージに対して別の交換/キュー バインディングが必要な場合があります。

ブラックリストについては... それが可能かどうかはわかりません。トピック交換により、ルーティング キー コンポーネントのホワイトリスト登録が可能になります。

たとえば、 のバインドでfoo.*.barは、"foo." で始まり、途中に任意の単語があり、".bar" で終わるすべてのルーティング キーが許可されます。

私の知る限りでは、ルーティング キー セグメントをブラックリストに登録する方法はありません。

システムの構成方法を再考するのが最善の選択肢のようです。

何をする必要があるかの例を投稿すると、おそらく役に立ちます...どのタイプのメッセージを扱っているのか、同じメッセージを消費するプロデューサーを含む多くの消費者がいる理由.

--

ps私はしばらくrabbit.jsを使用していましたが、その制限が気に入らないことがわかりました。ライブラリに切り替えて、その上にノード用wascallyの独自のライブラリを構築しています。rabbusあなたはそれらをチェックアウトするかもしれません...それらはもう少し柔軟性があり、rabbusは箱から出してすぐに同じパターンをたくさん提供します.

于 2015-08-05T03:02:45.923 に答える