配置发往"过期消息地址的消息的到期时间"在Hornetq

时间:2014-06-06 09:22:34

标签: java jms hornetq

我在Hornetq中配置了一个消息到期目的地,如下所示

<address-setting match="#">
      <dead-letter-address>jms.queue.error</dead-letter-address>
      <expiry-address>jms.queue.error</expiry-address>
         <max-delivery-attempts>3</max-delivery-attempts>
      <redelivery-delay>2000</redelivery-delay>
      <max-size-bytes>10485760</max-size-bytes>       
      <message-counter-history-day-limit>10</message-counter-history-day-limit>
      <address-full-policy>BLOCK</address-full-policy>
      <redistribution-delay>60000</redistribution-delay>
</address-setting>

一旦超过到期时间,消息就会被重定向到到期地址。这些消息无限期地存在于到期地址上,是否有办法为这些消息提供到期时间,以便它们只能在有效期限内过期?

1 个答案:

答案 0 :(得分:0)

如果您使用的是至少2.3,则可以为延迟设置到期日设置,而不指定到期地址:

   <address-setting match="jms.queue.error">
         <dead-letter-address>ExpiryOfExpiry</dead-letter-address>
         <expiry-address>ExpiryOfExpiry</expiry-address>
         <max-delivery-attempts>3</max-delivery-attempts>
         <expiry-delay>3600000</expiry-delay> <!-- one hour... or use whatever you want -->
         <max-size-bytes>10485760</max-size-bytes>       
         <address-full-policy>PAGE</address-full-policy>
         <redistribution-delay>60000</redistribution-delay>
    </address-setting>

ExpiryOfExpiry将是一个空地址..因此该消息将被发送给nobody。它将在地址上被删除,然后被删除。

我们没有对此方案进行测试,但它应该可行。如果您发现任何问题,请告诉我。