クライアントからサーバーにデータを送信したい。サーバーにとって重要なのは最後のメッセージだけです。サーバーが障害の後に起動した場合、サーバーがクライアントから最後のメッセージを取得するだけにしたい。
サーバーがダウンしている間、クライアントが処理を続けてメッセージを送信するか、少なくともそれらをキューに入れます(1つのメッセージの長さで)。
これには NetMQ/ZeroMQ を使用しようとしています。どうすればそれができますか?
ありがとう!
最初に、クライアントがパブリッシャーである PubSub を使用します。PubSub を使用すると、オンラインのときにのみメッセージを取得できます。サブスクライバー (サーバーの場合はサーバー) がダウンしている場合は、すべてのメッセージ (ラジオなど) を見逃していました。
ZeroMQ には Conflate という機能もあります (NetMQ にはまだありません。移植する必要があるかもしれません)。次の質問を見てください。
ZeroMQ: Publish–Subscribe で古いメッセージを削除して新しいメッセージを優先させたい
また、ZeroMQ ドキュメントからの conflate の説明:
ZMQ_CONFLATE: 最後のメッセージのみを保持 設定されている場合、ソケットはインバウンド/アウトバウンド キューに 1 つのメッセージのみを保持します。このメッセージは、受信した最後のメッセージ/送信する最後のメッセージです。「ZMQ_RCVHWM」および「ZMQ_SNDHWM」オプションを無視します。マルチパート メッセージをサポートしません。特に、その一部のみがソケットの内部キューに保持されます。