RabbitMQ - 延迟队列

一、延迟队列

1-1 简单介绍

​ 延迟队列:存储延迟消息的队列

​ 延迟消息:消息存入队列,等待一定时间后才交于消费者进行消费

1-2 应用场景

场景一 :订单系统

​ 用户下单的30分钟确认支付,若超过30分钟,则该订单被列为超时订单处理。可以使用延时队列,在30分的时候处理这个订单的状态。关闭订单,并且退还库存。

场景二:定时推送命令

​ 手机远程遥控家里的智能设备在指定的时间进行工作。可以使用延迟队列,将指令定时推送到智能设备进行处理。

二、RabbitMQ 实现延迟队列

RabbitMQ 本身不支持延迟队列,但是可以通过 死信队列(DLX)和 消息有效时间 (TTL)来实现延迟队列。

  • TTL - Time To Live
    • 设置消息有效时间,若超时,则消息变为 dead letter(死信)
    • Queue 的 x-expires 参数,Message 的 x-message-ttl 参数,都可以配置消息的有效时间
    • x-expires, x-message-ttl 同时存在,取最小的为准
    • 设置 Queue 的 x-expires,队列中所有消息都有相同的过期时间
    • 设置 Msg 的 x-message-ttl,则该过期时间仅对该消息有效。
  • DLX - Dead Letter Exchanges
    • 配置 Queue 的 x-dead-letter-exchange 和 x-dead-letter-routing-key(可选)两个参数
    • 如果队列内出现了dead letter,则按照配置的两个参数重新路由转发到指定的队列
    • x-dead-letter-exchange:出现 dead letter 之后将 dead letter 重新发送到指定 exchange
    • x-dead-letter-routing-key:出现 dead letter 之后将 dead letter 重新按照指定的 routing-key发送
    • 出现 DL 的情况
      • 消息或者队列的TTL过期
      • 队列达到最大长度
      • 消息被消费端拒绝(basic.reject or basic.nack)并且 requeue=false

在这里插入图片描述

三、Python + Pika 实现

import datetime
import pika


def conn():
    credentials = pika.PlainCredentials('test', '123')
    connection
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值