gpt4 book ai didi

activemq - 如何为 ActiveMQ.DLQ 队列设置到期时间?

转载 作者:行者123 更新时间:2023-12-04 12:50:03 24 4
gpt4 key购买 nike

作为操作人员(不是开发人员)并基于 http://activemq.apache.org/message-redelivery-and-dlq-handling.html我试图在集成到 JBoss Fuse 6.2 中的 ActiveMQ.DLQ 上设置到期时间,以确保 KahaDB 的文件夹不会用完磁盘空间,但下面的设置似乎对队列消息没有任何作用,只是将它们复制到 ActiveMQ.Advisory。 Producer.Queue.ActiveMQ.DLQ 两次。

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

为了测试这只是使用 JBOSS FUSE MANAGEMENT CONSOLE 将消息发送到 ActiveMQ.DLQ 队列,并注意到生成了一个新队列,该队列的消息数量是我已发送入队的消息数量的两倍:
ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQ  0   0  0  8  0  0
ActiveMQ.DLQ 4 0 0 4 0 0

对此有什么想法吗?

最佳答案

您的 deadLetterStrategy很好并且必须正常工作,但您不能像这样测试它,因为到期是由尝试交付给消费者的业务代码设置的,当它失败时,它通过更改其到期将消息发送到 DLQ。
您可以通过设置 setJMSExpiration 向您想要的任何队列发送消息来进行测试。 (Time to live) to 1 例如,如果 processExpired="true",消息将不会被传递并直接发送到 DLQ。 .
ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQ之所以创建,是因为您有一个向 ActiveMQ.DLQ 发送消息的生产者.
因为您已经向 ActiveMQ.DLQ 发送了 4 条消息您在 ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQ 中有 8 条消息因为此主题在生产者启动时收到一条消息,而在停止消息时收到另一条消息,这意味着您的 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

关于activemq - 如何为 ActiveMQ.DLQ 队列设置到期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40231077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com