1

ここでの使用例は次のようになります。

  • 私はデータ/値のパブリッシャーを持っています
  • 複数の値のコンシューマー (またはサブスクライバー) があり、開始時に値を読み取り/取得し、その後の更新をサブスクライブする必要があります

目標は、パブリッシャーとサブスクライバーの両方が「1 つの」ことだけを行うようにすることです。

例: パブリッシャーがパブリッシュoutside.temperature=28し、複数のサブスクライバーがその新しい情報に反応します。たとえば、ヒーターをオンにしたり、「長いジョンを連れてきて」というテキスト メッセージを送信したり、モニターのグラフィックを更新したりします。

私が今日(機能している)持っているquery outside.temperatureのは、サブスクライバーが最新の値を(再)送信できるキューを備えたApache ActiveMQです。応答は、クエリを送信したコンシューマー (応答先キュー) に送信されます。新しい値は、同じ名前のトピックに公開されます ( outside.temperature)。サブスクライバーが (再) 起動するたびに、これが発生します: 現在の状態を照会し、更新をサブスクライブします。

サブスクライバーは次の 2 つのことを行う方法を知っている必要があるため、これはすべて非常に複雑に思えます。

  • 値を要求する方法 (キューと応答先キュー) を知っている、つまりポーリング
  • 将来の値 (トピック) をサブスクライブする方法を知っている、つまり、プッシュをサブスクライブする

パブリッシャーは、次の 2 つの考え方を実行する方法を知っている必要があります。

  • クエリ (キュー) への返信方法、ポーリング リクエストへの回答方法を知っている
  • 新しい価値(トピック)を公開する方法を知っている、新しい価値をプッシュする

ここでの目標は、次のようなミドルウェア ソフトウェアを用意することです。

  • キーの最後の既知の値を保持 (および永続化)
  • そのキーのすべてのサブスクライバーに変更を公開します。つまり、pubsub
  • 新しいサブスクライバーに最新の既知の値を (プッシュとして) 送信する

これにより、パブリッシャーとサブスクライバーの両方の複雑さが軽減されます。

これを解決するために Redis を調べてきましたが、PUBSUB 機能は上記の例のトピックを置き換えるだけであり、サブスクライバーの起動 (および応答) 時の現在の値のポーリング、つまりクエリ/キュー部分は置き換えません。

私は ZooKeeper を探していて、それは時計であり、私のニーズを満たしているように見えますが、非常に複雑で、かなり多くのコードが必要です。

私は ØMQ (ZeroMQ) を見てきましたが、Last Value Caching, LVCという用語を見ました。ここでの提案は、パブリッシャーとサブスクライバーの間にプロキシを作成することです。

https://github.com/simonmacmullen/rabbitmq-lvc-pluginのように、RabbitMQ の LVC 拡張機能があります。

私の質問は、カスタム プロキシやプラグインを追加する必要なく、ビルトインのラスト バリュー キャッシングを使用して pub-sub を実行する FLOSS 製品が他にあるかどうかです。

4

1 に答える 1

0

There's a couple of ways to do this over ZeroMQ; read this http://zguide.zeromq.org/page:all#Last-Value-Caching for a simple pattern and then http://zguide.zeromq.org/page:all#Reliable-Publish-Subscribe-Clone-Pattern is a more complex approach.

Note that both approaches use a piece in the middle; however you can quite trivially make the first LVC pattern work just in the publisher.

于 2012-12-26T00:02:06.353 に答える