ActiveMQ-死信配置项及丢弃和重新消费

ActiveMQ中,过期或未消费的消息会被移到死信队列(DLQ)。默认策略是sharedDeadLetterStrategy,所有问题消息存入共享队列。另一种是individualDeadLetterStrategy,问题消息保存到各自的队列。可通过配置useQueueForQueueMessages和useQueueForTopicMessages调整保存方式。默认仅持久化消息进死信队列,设置processNonPersistent="true"可使非持久化消息也进入。消费端可直接消费死信队列进行重新处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.youkuaiyun.com/z69183787/article/details/88534988

当对消息设置存活过期时间时,消息超过时间仍然未被消费,则会自动移动到死信队列中。DLQ-死信队列(Dead Letter Queue)用来保存处理失败或者过期的消息。

producer.setTimeToLive(1);//设置消息的存活时间
		producer.send(message);

死信队列有两种模式:
sharedDeadLetterStrategy :
共享队列,所有问题消息,都保存在共有的一个队列中;这是ActiveMQ的默认策略;

individualDeadLetterStrategy :

将问题消息,保存到各自的队列中,队列名字不同,对于Queue模式,队列的名字前缀是ActiveMQ.DLQ.Queue;对于Topic,队列名字前缀为ActiveMQ.DLQ.Topic。

修改死信队列名称

<policyEntry queue="f" prioritizedMessages="true" >
                <deadLetterStrategy> 
​
                    <individualDeadLetterStrategy   queuePrefix="DLxxQ." useQueueForQueueMessages="true" /> 
​
                </deadLetterStrategy> 
              </policyEntry>

useQueueForQueueMessages: 设置使用队列保存死信,还可以设置useQueueForTopicMessages,使用Topic来保存死信

默认只有持久化的消息才可能进死信队列,如果要非持久化的消息也可以进入死信队列,可以通过修改配置文件实现。

让非持久化的消息也进入死信队列processNonPersistent="true"

  <individualDeadLetterStrategy   queuePrefix="DLxxQ." useQueueForQueueMessages="true"  processNonPersistent="true" /> 

 

过期消息不进死信队列

<individualDeadLetterStrategy   processExpired="false"  /> 

以上提到的配置可以实现死信丢弃,即不保留。

 

当然,消费端可以通过直接指定死信队列的名称,进行再次消费。

Queue queue = session.createQueue("ActiveMQ.DLQ");

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值