【消息中间件】03-RabbitMQ 死信队列、延时队列

1. 死信队列

1.1 什么是死信队列?

死信(“Dead Letter”),是RabbitMQ中的一种消息机制,当你在消费消息时,死信主要是以下几种原因产生:

  • 消息被消费者否定确认,使用channel.basicNack或channel.basicReject,并且 requeue 属性被设置未false
  • TTL过期的消息
  • 队列消息数量超过最大队列长度

1.2 原理图:

死信队列原理图.png

1.3 实例:

仓库地址:https://github.com/Tooi6/demo-springboot/tree/master/rabbitmq-deadletter

1.4 死信队列参数

参数 功能
x-dead-letter-exchange 声明当前队列绑定的死信交换机
x-dead-letter-routing-key 声明当前队列的死信路由key

2. 延时队列

2.1 什么是延时队列

延时队列就是用来存放需要在指定时间被处理的元素的队列。

2.2 RabbitMQ 如何实现延时队列

RabbitMQ 本身是不支持延时队列的,但我们可以利用TTL机制和死信队列的来实现延时队列的效果。
下面是延时队列的架构图:

延时队列架构图.png

原理: 生成者产生一条延时消息(设置TTL时间),根据需要延时时间的不同,利用不同的routingkey将消息路由到不同的延时队列,每个队列都设置了不同的TTL属性,并绑定在同一个死信交换机中,消息过期后,根据routingkey的不同,又会被路由到不同的死信队列中,消费者只需要监听对应的死信队列进行处理即可。

2.1 实例:

仓库地址:https://github.com/Tooi6/demo-springboot/tree/master/rabbitmq-delayqueue

你可能感兴趣的:(【消息中间件】03-RabbitMQ 死信队列、延时队列)