2009-08-21 6 views
5

私は小さな自家製メッセージングシステムを置き換えようとしており、zmqでちょっと遊んでいます。 私は、遅い読者を検出し、それらを起動/切断する必要があります。遅い読者はキューのサイズが一定のしきい値を上回っている特定の消費者を意味します。zmq(zeromq)で遅い読者を検出する

これまでのところzmqはすべての消費者をブロックしているようですが、そのうちの1つが少し遅い(十分公正) - 潜在的な低消費者を検出する方法が見つかりません。誰でも とどのような経験があり、これはzmqでどのように可能ですか?または他のブローカーレスメッセージングシステムで再考することができますか?

+0

なぜ、HWMに達したときに最新のメッセージを引き続き取得し、古いメッセージをドロップする方が良いのでしょうか?少なくとも私はこの行動を好む多くの状況を考えることができます。私は確かに効果を自分自身ロールすることができますが、それは一般的に便利なオプションのように思える。 –

答えて

3

zeromq-2.0.7以降、ZMQ_PUBソケットでZMQ_HWMオプションを設定すると、サブスクライバのキューに入れることができるメッセージの最大数を制御できます。最高水準点に達すると、キューサイズが最高水準点を下回るまで、そのサブスクライバー宛てのメッセージはすべて廃棄されます。これは、あなたが遅いリーダーと呼ぶものに専用のメモリの量を制限します。

しかし、ZeroMQライブラリはクライアントではなくソケットを公開しているので、ライブラリ自体を変更することなく、不要なクライアントを特定して強制的に切断することはできません。

0

ZeroMqガイドには、これに関するセクションがあり、それは "Suicidal Snail Pattern"というパターンを実装することを示唆しています。

基本的に、依存関係を元に戻し、遅いサブスクライバに、読み込み速度が遅くなったかどうかを検出する方法を提供することで、自分自身の接続を切断/終了させるようにします。

関連する問題