0

サブスクライバーが実行されていない場合、イベントをチャネルに公開すると、そのイベントがドロップされることに気付きました。

そのため、チャンネルに何かを公開する前に、サブスクライバーが実行されているかどうかを確認したいですか?

パブリッシュされたイベントが脱落しないように、状態を識別する方法または別の方法。前もって感謝します

4

1 に答える 1

4

サブスクライバーがリッスンしているかどうかはわかりません。これは仕様によるものです。

http://redis.io/topics/pubsubを参照してください

[...] 送信者 (パブリッシャー) は、メッセージを特定の受信者 (サブスクライバー) に送信するようにプログラムされていません。むしろ、発行されたメッセージは、サブスクライバーが存在する可能性がある (存在する場合) という知識なしに、チャネルに特徴付けられます。

これは Redis に固有のものではありませんが、Pub/Sub 実装の背後にある基本原則です。

おそらくメッセージを確実に配信する方法を尋ねているでしょうが、繰り返しになりますが、Redis にはこのための組み込み機能がありません。

http://redis.io/topics/notifications

Redis Pub/Sub は発火後、現在のところ忘れてしまうため、アプリケーションがイベントの信頼できる通知を要求する場合、つまり、Pub/Sub クライアントが切断され、後で再接続する場合、この機能を使用する方法はありません。切断されたクライアントは失われます。

既存の機能の上に独自のメカニズムを実装したい場合があります。たとえば、新しいメッセージを PUB 側のリストにLPUSHし、クライアント側でそれらをRPOPし、キースペース通知を使用してそうするタイミングを知ることができます。このアプローチでは、リッスンしているクライアントがなくてもメッセージを失うことはありません。

于 2014-10-02T11:20:44.733 に答える