RabbitMQ实现延迟队列如此简单,首选!
RabbitMQ 本身并不直接支持消息的延迟投递。但是可以通过TTL和DLX(死信交换机)来实现,如果是高版本,也可以通过插件来实现,更简单。
一、使用 TTL 和 DLX(死信交换机):
使用消息的 "Time To Live" (TTL) 和 "Dead Letter Exchange" (DLX) 特性。你可以设置消息的 TTL,并将它们发送到一个队列,当消息过期后,它们将被自动发送到另一个队列,即死信队列,而不是原始目标队列。消费者监听死信队列,即可拿到数据,支持相关操作。
eg1:超时未支持,取消订单。
eg2:定时发送消息提醒等。
流程:
1、创建一个普通队列,并设置消息的 TTL 属性;
2、创建一个死信交换机和死信队列,然后将普通队列绑定到死信交换机;
3、发送消息到普通队列,它将在 TTL 过期后被发送到死信队列;
进入死信交换机的原因有哪些:
1、【消息的 TTL(Time To Live)过期】: 当消息在队列中等待时间超过了其设置的 TTL 时,消息会变成过期消息,并被自动发送到死信队列。
2、【消息被拒绝(Nack)】: 当消费者明确拒绝消息时,可以选择将消息发送到死信队列。这通常在消费者处理消息时发生错误或者消息无法被正确处理的情况下发生。
3、【队列达到最大长度】: 如果队列设置了最大长度限制,当队列已满而新消息到达时,旧的消息可能会被发送到死信队列以腾出空间给新的消息。
二、RabbitMQ 的插件(RabbitMQ Delayed Message Plugin)
RabbitMQ 提供了一个称为 "rabbitmq_delayed_message_exchange" 的插件,它允许你创建延迟队列。注意有版本要求,RabbitMQ 需要大于 3.6.0。
流程:
1、安装插件(需要 RabbitMQ 3.6.0 或更高版本);
2、创建一个交换机,指定类型为 "x-delayed-message";
3、创建一个队列并绑定到这个交换机,然后发送消息到这个队列。通过在消息属性中设置 x-delay 头部参数来指定消息的延迟时间
#程序员##程序员经验分享##大数据##计算##计算机##编程##消息队列#