死信队列
死信队列(Dead-Letter Queue,简称DLQ)是一种特殊的消息队列,它用于接收那些无法被消费者成功消费的消息。
在一个典型的消息队列系统中,当消息被发送到队列中后,消费者会从队列中取出并处理消息。但是在某些情况下,消息可能无法被成功处理,例如消息格式错误、消费者处理异常等情况。这时,这些消息会被重新放回队列中,等待下一次被消费者处理。如果消息一直无法被成功处理,它可能会一直被重复消费,浪费系统资源。
为了避免这种情况的发生,可以设置一个死信队列,当消息无法被消费者成功处理时,将其转发到死信队列中。通常情况下,死信队列的消费者会将这些无法被成功处理的消息进行处理、记录或者通知相应的人员进行处理。
使用死信队列可以有效地避免消息无限循环被重复消费的问题,同时也可以增加系统的可靠性和容错性。在实际应用中,死信队列通常被用于处理重要的、难以被处理的消息,如订单、支付等。
需要注意的是,在使用死信队列时,需要注意设置合适的死信队列和消费者的参数,以及合理的重试机制,以充分利用死信队列的优点。
应用场景: 为了保证订单业务的消息数据不丢失,需要使用到 RabbitMQ 的死信队列机制,当消息消费发生异常时,将消息投入死信队列中.还有比如说: 用户在商城下单成功并点击去支付后在指定时间未支付时自动失效
死信的来源
消息 TTL(生存时间) 过期
队列达到最大长度(队列满了,无法再添加数据到 mq 中)
消息被拒绝(basic.reject 或 basic.nack)并且 requeue=false.