如何设置ActiveMQ.DLQ队列的到期时间?

如何设置ActiveMQ.DLQ队列的到期时间?,activemq,Activemq,作为一名操作人员(而不是开发人员),我尝试在集成到JBoss Fuse 6.2中的ActiveMQ.DLQ上设置过期时间,以确保KahaDB的文件夹不会超出磁盘空间,但下面的设置似乎对队列消息没有任何作用,而是将它们复制到ActiveMQ.Advisory.Producer.queue.ActiveMQ.DLQ两次 ... <policyEntry queue=">" producerFlowControl="false"> <deadLetterStrategy

作为一名操作人员(而不是开发人员),我尝试在集成到JBoss Fuse 6.2中的ActiveMQ.DLQ上设置过期时间,以确保KahaDB的文件夹不会超出磁盘空间,但下面的设置似乎对队列消息没有任何作用,而是将它们复制到ActiveMQ.Advisory.Producer.queue.ActiveMQ.DLQ两次

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

对此有何想法?

过期邮件的默认操作是将其发送到DLQ。您需要避免处理过期消息,这意味着:丢弃它们。在DLQ上添加
processExpired=“false”
可以解决此问题

(引自)

要让ActiveMQ丢弃过期消息,请在死信策略中将processExpired属性配置为false:


...

您的
死信策略
很好,必须能够正常工作,但您不能这样测试,因为过期时间是由尝试交付给消费者的业务代码设置的,当过期时间失败时,它会通过更改过期时间将消息发送给DLQ。 您可以通过将
setjmsexprivation
(生存时间)设置为1,将消息发送到您想要的任何队列进行测试。例如,这样,如果
processExpired=“true”
,消息将不会传递并直接发送到DLQ

之所以创建了
ActiveMQ.advision.Producer.Queue.ActiveMQ.DLQ
,是因为您有一个生产者向
ActiveMQ.DLQ
发送了消息。 因为您已向
ActiveMQ.DLQ
发送了4条消息,所以
ActiveMQ.advical.Producer.Queue.ActiveMQ.DLQ
中有8条消息,因为此主题在生产者启动时接收一条消息,在生产者停止消息时接收另一条消息,这意味着您的JBOSS FUSE管理控制台创建了一个用于发送消息的连接,并在此之后停止发送消息

请注意,默认情况下,ActiveMQ将永远不会使发送到DLQ的消息过期,如果您想将它们保留7天,可以设置


谢谢。我们的策略是保留最后7天的消息,以便在需要进行故障排除/调试时可以检查DLQ消息。想知道如何在activemq.xml文件中设置它吗?如果他们想处理过期消息而不是丢弃它们,那么这不应该是
processExpired=“false”
必须是真的吗?也许op可以更详细地阐述一下:我理解消息应该在过期日期发布,而不是保留。在这种情况下,设置为false将是right@thst设置processExpired=“false”告诉死信策略(在DLQ之前的代理级别上)不要处理过期消息,这样它们将被丢弃而不是发送到DLQ,据我所知,op guy需要消息在DLQ上可用7天(包括过期消息),因此,processExpired必须为true才能将所有消息发送到DLQ
ActiveMQ.Advisory.Producer.Queue.ActiveMQ.DLQ  0   0  0  8  0  0
ActiveMQ.DLQ                                   4   0  0  4  0  0
<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>