作为一名操作人员(不是开发人员)并基于http://activemq.apache.org/message-redelivery-and-dlq-handling.html,我尝试在集成到JBoss中的ActiveMQ.DLQ上设置到期时间Fuse 6.2 确保 KahaDB 的文件夹不会超出磁盘空间,但以下设置似乎对队列消息没有任何作用,而是将它们复制到 ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQ 两次。
...
<policyEntry queue=">" producerFlowControl="false">
<deadLetterStrategy>
<sharedDeadLetterStrategy expiration="300000"/>
</deadLetterStrategy>
</policyEntry>
...
Run Code Online (Sandbox Code Playgroud)
为了测试这一点,只需使用 JBOSS FUSE 管理控制台将消息发送到 ActiveMQ.DLQ 队列,并注意到生成了一个新队列,其数量是我发送入队的消息数量的两倍:
ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQ 0 0 0 8 0 0
ActiveMQ.DLQ 4 0 0 4 0 0
Run Code Online (Sandbox Code Playgroud)
对此有什么想法吗?
你的deadLetterStrategy功能很好并且必须工作正常,但你不能像这样测试它,因为过期时间是由尝试传递给消费者的业务代码设置的,当它失败时,它会通过更改过期时间将消息发送到 DLQ。您可以通过将(生存时间)设置为 1 来将消息发送到您想要的任何队列进行测试setJMSExpiration,例如,这样消息将不会被传递并直接发送到 DLQ if processExpired="true"。
ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQ被创建是因为您有一个生产者向 发送消息ActiveMQ.DLQ。因为您已向您发送了 4 条消息,ActiveMQ.DLQ您有 8 条消息,ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQ因为该主题在生产者启动时收到一条消息,而在生产者停止消息时收到另一条消息,这意味着您的 JBOSS FUSE 管理控制台创建一个用于发送消息的连接,并在此之后停止它。
请注意,默认情况下,ActiveMQ 发送到 DLQ 的消息永远不会过期,如果你想将它们保留 7 天,你可以设置<sharedDeadLetterStrategy expiration="604800000" processExpired="true" processNonPersistent="true" />
http://activemq.apache.org/advisory-message.html
http://activemq.apache.org/message-redelivery-and-dlq-handling.html
| 归档时间: |
|
| 查看次数: |
14441 次 |
| 最近记录: |