私は ZeroMQ の C# ラッパーを使用していますが、これは ZeroMQ の根本的な問題のようです。
ブロックせずにキューに入れずにメッセージをプッシュする方法はありますか? サーバーが稼働していない場合、メッセージをブロックせずに永久に破棄したいと考えています。
これまでに試した設定は次のとおりです。
1)
送信(ブロック送信)
最高水準点 = 0
これは(意図的に)ブロックされませんが、ソケットが接続されるまでメモリ内でキューに入れられているようです(プロセスのためにメモリが増加し続けます)。
2)
送信(ノンブロッキング送信)
最高水準点 = 1
これは競合状態です。立て続けに 2 つのメッセージを送信すると、最高水準点を超えたために 1 つのメッセージが破棄されることがあります。
3)
ソケットをポーリングして、ブロックするかどうかを確認します。ブロッキングを開始する前に 1 つの (古い) メッセージをキューに入れる必要があるため (HWM = 1 に設定した場合)、これはあまり役に立ちません。
サーバーがオンラインに戻るとすぐに、クライアントから大量の古いメッセージを取得するため、ハイウォーターマークを使用したノンブロッキング送信は望ましくありません。
ブロックしたくないので、送信のブロックは機能しません。