死信队列:顾名思义,存放“死”了的消息的队列。当然了,并不是那个真正的死的意思,那么什么样的消息才被认为是“死”了的消息呢,有以下几种情况:
上图描述的就是一个消息被拒绝消费后如何进入死信队列的。消息过期主要用于实现延时队列,会在下面介绍。
延时队列广泛的用于各种业务场景,比如常见的在12306购票时,订单在一定时间内自动关单。我们都知道MQ是即时消费的,那么能不能实现延时消费功能呢?
答案是肯定的。Rabbit MQ提供了一种死信队列配置,可以将消息保存在一个队列中一定时间(过期时间),然后会转发到一个死信交换机,再发送到绑定到此死信交换机上的队列上,然后被消费者消费,实现延时消费的功能。
那么如何配置一个符合延时功能的死信队列呢?在这我们通过在Rabbit MQ的管理页面中配置,以便直观的观察并理解它。
配置之前,先通过一个简单的结构图辅助理解??
为了简便,下面创建的交换机均为直连类型(Direct)的交换机
创建一个直连类型(Direct)的交换机create_exchange
注:其它配置参数项为
创建一个队列dead-queue。生产者提供的消息将被经由第一步创建的交换机保存到此队列,此队列需要配置消息的过期时间(x-message-ttl)、死信队列交换机(x-dead-letter-exchange)、死信队列和死信交换机的绑定规则(x-dead-letter-routing-key)。此队列中的消息过期后,按照队列的顺序转发给死信交换机。
注:其它配置参数项为
将第二步创建的延时队列绑定到第一步创建的交换机上(Binding Key = create.event)
创建一个用于接收延时队列中过期消息的交换机(dead_exchange)
创建一个队列expire_queue。第四步收到的过期消息将发送到此队列,并被消费者消费。
将第五步创建的接收过期消息的队列绑定到第四步创建的死信交换机上(Binding Key = expire.event)
进入队列查看详细信息
进入队列查看详细信息
原文:https://www.cnblogs.com/jinzlblog/p/15210015.html