2017-09-25 2 views
0

ActiveMQ NMSコンシューマ(C#)は古いメッセージを受信できません。受信したメッセージで動作するwhileループになります。ActiveMQ NMSコンシューマは、C#の特定のシナリオでメッセージを受信しません。

私は、メッセージが必要なときにNMSコンシューマ接続を確立し、受信したメッセージを操作します。

問題は、私のプログラムの最初の接続試行の後に投稿されたメッセージをプログラムを起動するたびにダウンロードして使用することができます。

ただし、メッセージが流入していない場合、最初の接続を確立する前にいくつかの古いメッセージが残っていると、これらのメッセージは消費されません。私は適切なconnection.start()を使用しました。私はconsumer.receive(0)0 - waittimeを使用しています。

答えて

0

タイムアウトなしのコンシューマー受信を呼び出すと、メッセージを受け取らないリスクがあり、そのために準備する必要があります。消費者は、ブローカーに受信呼び出しのメッセージを問い合わせないので、メッセージがディスパッチされていないか、まだ飛行中であれば、受信はヌルメッセージを返します。

メッセージを取得しようとするたびに新しい接続を作成することは本当に反パターンであり、この状況をさらに避けるために長期間接続/消費者を使用することを検討する必要がありますが、これを完全に軽減することはできません受信(0)。

+0

ありがとうございます。各メッセージの接続を確立したり切断したりするための良い設計ではないと言いましたので、永続的なものに変更しようとします。私は受信(2秒)として2秒の待機を追加することでこれを解決し、それは働いた。メッセージが返されるたびに2秒間待たずに戻ります。メッセージがない場合は2秒待つ。 – saravanan

関連する問題