2016-10-25 11 views
0

http://activemq.apache.org/message-redelivery-and-dlq-handling.htmlに基づいてオペレーションの男(開発者ではない)として、私はJBoss Fuse 6.2に統合されたActiveMQ.DLQで有効期限を設定しようとしましたが、KahaDBのフォルダはディスクスペースから外れてしまいますが、キューのメッセージには何も表示されず、ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQに2回コピーされます。ActiveMQ.DLQキューの有効期限を設定する方法は?

ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQ 0 0 0 8 0 0 
ActiveMQ.DLQ         4 0 0 4 0 0 

:ちょうどJBOSS FUSE管理コンソールを使用してActiveMQ.DLQキューにメッセージを送信し、新しいキューが、私はエンキューを送ったメッセージ数の2倍を持つ生成されて気づいたこれをテストするために

... 
<policyEntry queue=">" producerFlowControl="false"> 
    <deadLetterStrategy> 
     <sharedDeadLetterStrategy expiration="300000"/> 
    </deadLetterStrategy> 
</policyEntry> 
... 

これについて何か考えていますか?

答えて

1

あなたdeadLetterStrategyが良好であり、正常に動作する必要がありますが、このようにテストすることはできません。これは、消費者に配信しようとするビジネスコードによって期限が設定され、失敗した場合、期限切れを変更してメッセージをDLQに送信するためです。 setJMSExpiration(有効期限)を1に設定するなどして、任意のキューにメッセージを送信してテストすることができます。この場合、メッセージは配信されず、processExpired="true"の場合はDLQに直接送信されます。

ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQプロデューサーにActiveMQ.DLQにメッセージを送信したために作成されました。 ActiveMQ.DLQに4つのメッセージを送信したため、ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQに8つのメッセージが含まれています。プロデューサがメッセージを停止するときに別のメッセージを受信するとメッセージが表示されるためです。それ以降。あなたが彼らに7日間を維持したい場合は、デフォルトで、ActiveMQのは、DLQに送信されるメッセージを期限切れになりませんことを

ノートあなたはTHST <sharedDeadLetterStrategy expiration="604800000" processExpired="true" processNonPersistent="true" />

http://activemq.apache.org/advisory-message.html

http://activemq.apache.org/message-redelivery-and-dlq-handling.html

+0

は 'processExpired =" false "でなければなりません。 – thst

+0

期限切れのメッセージを処理してそれらを破棄しない場合は、真でなければなりません。 –

+1

多分詳細は詳しく述べることができます:メッセージは期限切れにdiscsrded 、保持されていません。その場合はfalseに設定することは正しくなるでしょう – thst

0

有効期限が切れたメッセージのデフォルトの動作は、それをDLQに送信することです。期限切れのメッセージの処理を避ける必要があります。つまり、破棄します。 DLQにprocessExpired="false"を追加すると問題が解決されます。

http://activemq.apache.org/message-redelivery-and-dlq-handling.htmlからの引用)

は、ちょうど期限切れのメッセージを破棄するのActiveMQを伝えるデッド・レター戦略にfalseにprocessExpiredプロパティを設定するには:

<broker...> 
    <destinationPolicy> 
    <policyMap> 
    <policyEntries> 
     <!-- Set the following policy on all queues using the '>' wildcard --> 
     <policyEntry queue=">"> 
     <!-- 
      Tell the dead letter strategy not to process expired messages 
      so that they will just be discarded instead of being sent to 
      the DLQ 
     --> 
     <deadLetterStrategy> 
      <sharedDeadLetterStrategy processExpired="false" /> 
     </deadLetterStrategy> 
     </policyEntry> 
    </policyEntries> 
    </policyMap> 
    </destinationPolicy> 
... 
</broker> 
+0

感謝を設定することができます。私たちの方針は、トラブルシューティング/デバッグのためにDLQメッセージを必要に応じてチェックできるように、最後の7日間のメッセージを保管することです。それをactivemq.xmlファイルに設定する方法をお考えですか? –

関連する問題