プロセス(つまりプロデューサ)が可変数のプロセス(つまりコンシューマ)に一方向のメッセージを送信する必要があるという要件に取り組んでいます。イベントドリブン公開サブスクリプションモデル
パブリッシュ・サブスクライブ・モデルは、コンシューマがプロデューサからのメッセージをサブスクライブするため、このように見えました。私はこれを達成するためにZeroMQを使ってみました。
消費者が継続的にメッセージをポーリングする必要があります。
はしかし、私はそれでいくつかの問題を抱えています。私は新しいメッセージがあるときに通知を受ける消費者を持っています。
プロデューサキューがいっぱいになる可能性があります。私は、プロデューサーが何らかの条件(5秒より古いメッセージを削除する、または5回読み込まれたメッセージを削除するなど)に基づいてキューからメッセージを削除することが好きだったでしょう。
コンシューマがポーリングしているため、メッセージはキューから削除されないため、コンシューマは新しいメッセージが到着するまで重複メッセージを表示します。
私は間違ったモデルを使用している可能性があることを理解しています(公開購読は適切ではないかもしれません)。私はrequest-replyを使うことを考えましたが、プロデューサーは消費者の数を把握したくないので動作しません。
誰かが良い選択肢を提案できますか?
私の唯一の提案は、アプリケーションのメイン・ループ(または何でも)への通知を提供し、特別なリスナースレッドでパブ/サブポーリングをラップすることであり、また無視可能な限り迅速に受信トレイをアンロードします。 –
OMGからDDSミドルウェア標準をチェックアウトすることをお勧めします。すでにオープンソースの実装が良好で、OpenDDSと呼ばれています(http://www.opendds.orgを参照)。それはあなたがその行動を制御することを可能にする豊富なサービス設定を持っています。 OpenDDSの今後の3.1リリースは非常に良いでしょう。 –
ZMQ pub/subに関する3つの質問が混乱しています。 ZMQが何をしているのか本当に調べていないようです。 1)クライアントが明示的に行っているかどうかにかかわらず、何らかの形式のポーリングが常に行われているか、またはそれをハンドラにアタッチし、ライブラリがフードの下でそれを実行しているかどうか2)ZMQが開始する「最高水準点」それらがバッファから排出されない場合、特定のポイントの後にメッセージをドロップする3)メッセージは各加入者に一度だけ配信される。何か不足していますか? – jdi