nodeJSサーバーで使用されるrabbitMQがインストールされています。私は rabbit.js ライブラリを使用してウサギとやり取りしていますが、これまでのところ満足しています。
ファンアウトモードで同じキューに複数のサブスクライバーを取得しました。各ノードはサブスクライバーであり、パブリッシャーでもあります。これは私にとっては良いことであり、正常に動作します。発生した更新についてすべてのサーバーに通知したい状況がたくさんあるためです。それらのノードの1つ(パブリッシャーでもあります...)
私は、メッセージを送信した人 (同じキューのリスナーでもある) を除いて、キューのすべてのリスナーにメッセージを送信する必要がある場合に遭遇しました。
誰がリッスンしているか事前にわからないため (単一の場合もあれば、数百万の場合もあります)、ホワイトリスト ルート ルールによって特定のノードにルーティングすることはできません。それはある種の除外ワイルドカード ルーティング ルール (ブラックリスト) である必要があります。
rabbit.js を使用して実行できますか? どういうわけかrabbitmqでそれを行うことさえできますか?
私はうさぎをあまり知らないので、優しくしてください :)
ところで、rabbit.js を使用してそれを行う方法を知っていれば、さらに良い...
編集::
Derick Bailey のリクエストによると、これが必要な理由です。
webServicesとして動作する負荷分散されたnodeJSサーバーが多数あるシステムがあります。それらは互いに完全に透過的です。他のノードが存在するかどうかは誰も知りません。この分離により、他の「並列」ノードを追加および削除するだけで、より簡単にスケーリングできるため、この方法を維持したいと思います。
これらの各ノードには、独自のインメモリ ローカル キャッシュ サービスがあります。そして、単一のノードがエンティティを更新する状況に遭遇しました。次に、このノードが他のすべての並列ノード (キャッシュ内に同じエンティティを持つ可能性がある) に通知して無効化できるようにする必要があります。
問題は、メッセージを送信するノード (更新ノード) もメッセージを受信することです。これは、彼がリスナーでもあるためです。だから私は彼にその特定のメッセージの受信者リストから何らかの形で自分自身を除外してもらいたい... したがって、ルーティングブラックリストが必要です。(彼は自分自身を知っているので、彼自身のIDを除くすべての人にルーティングすることができます...しかし、彼は誰かが実際に相手側で聞いているかどうかさえ知りません...したがって、それは間違いなくホワイトリストにはなりません)
私の必要性が今より明確になることを願っています。
私はすでに私の問題の解決策を考えていましたが、それには私の側で追加の開発が必要であり、ウサギの現在の能力を使用してそれを回避したいと考えています (可能な場合) コンテンツに一意の ID を追加するだけですメッセージの。送信ノードは、このメッセージが自分からのものであることを認識し、そのメッセージを無視できます。しかし、明らかに理解できるように、失敗する可能性のある追加の落とし穴やその他のエッジケースを考慮する必要があるため、これは扱いにくいものになる可能性があります...
誰かがウサギの既存の構成を使用してそれを行う方法を教えてくれれば、私はその方法を聞いてうれしいです:)