前言:
1、在 RabbitMQ 中,没有严格意义上的死信队列,所谓死信队列和正常队列没有太大区别,都是需要创建自己的Exchange、Routingkey、Queue,只不过死信队列的 Exchange 和 RoutingKey 要作为参数绑定到正常队列(也可能是延时队列)上,根据参数策略决定是否进入死信队列
2、死信队列和延时队列可以相互调换使用,例如先发送消息给延时队列(其中配置的有延时策略),当消息达到延长的时间后,再丢入正常的业务队列中。此时就可以把正常的队列理解为死信队列,而前者可理解为延时队列
3、无法或暂时无法被消费、或消费出异常的消息,即被丢入死信队列
一、队列中的消息在以下情况,会进入死信队列
1、消息 TTL(time to live),(x-message-ttl)过期
2、队列达到最大长度(x-max-length),满了无法再存放消息
3、消息被拒绝(basic.reject / basic.nack),并且requeue = false
4、消费者开启了自动确认,然后消费消息时出现异常,超过了配置的重试次数
二、延时队列示例
1、定义延时交换机
//延时交换机
@Bean
public DirectExchange delayDirectExchange0() {
RabbitMQ的死信队列与延时队列实战
本文介绍了RabbitMQ中如何实现死信队列和延时队列。通过设置消息TTL、队列最大长度、消息拒绝等策略,消息会进入死信队列。同时,通过示例展示了延时队列的创建和测试,以及死信队列如何在消息消费异常时发挥作用。死信队列可应用于防止消息丢失和实现延迟处理。
订阅专栏 解锁全文
257

被折叠的 条评论
为什么被折叠?



