2017-01-13 12 views
0

私のシナリオでは、プロデューサは(いつものように)キューにメッセージを送りますが、時折消費者の1人がオフになるので、消費者がオフの間にその待ち行列に送られた。言い換えれば、私は、メッセージがあらかじめ送信されている間に、消費者の再接続後にメッセージを受信することを可能にするメッセージまたは全体のサーバの構成を探しています。クライアントが接続される前に送信されたキューからのメッセージを受信するActiveMQ

クライアントが再接続されると、キューに保留中のメッセージを受信できなくなります。私が必要とするのは、新しく接続されたクライアントに、既にキューに保留中のメッセージを受信させて他のクライアントがキューを解放するのを助けることです。

答えて

2

正常な動作が定義されています。キューに送信されたメッセージはまだ保留されており、コンシューマが接続されていない場合は失われません。

UPDATE

だから私はあなたの問題はprefetchPolicyだと思います。

persistent queues (default value: 1000) 
non-persistent queues (default value: 1000) 
persistent topics (default value: 100) 
non-persistent topics (default value: Short.MAX_VALUE - 1) 

ので、私はすべてのメッセージが接続されている消費者に派遣されたことを考えると、もう一つは、接続したときに、彼はあなたがにprefetchPolicyを設定する必要がキューの同時消費者を持っている場合ので、この動作を変更するには、メッセージを受信しません。デフォルトより低い値。たとえば、jms.prefetchPolicy.queuePrefetch=1をactivemq.xmlのuri configに追加するか、クライアントのURLに設定します。

メッセージボリュームが高い の高性能を得るには、大きなプリフェッチ値を推奨します。ただし、メッセージの量が少なくても、各メッセージの処理に時間がかかります。 これにより、コンシューマは一度に1つのメッセージしか処理できません。 ただし、0のプリフェッチ制限を指定すると、 がコンシューマにプッシュされるのではなく、コンシューマ が一度に1つずつメッセージをポーリングします。

http://activemq.apache.org/what-is-the-prefetch-limit-for.html

そして

http://activemq.apache.org/destination-options.html

+0

を見て、私はあなたがおそらくブローカーが再起動した場合にメッセージが保存されているので、送信されたときにPERSISTENTにメッセージを設定することを追加します同じように。 –

+0

確かにええ必要ならば –

+0

あなたの提案に感謝しますが、私は誤解されたと思うので、私は質問を延長しました。 – MarcinB

関連する問題