rabbitmq plugins rabbitmq_delayed_message_exchange消息队列延迟消息插件

本文介绍了RabbitMQ的rabbitmq_delayed_message_exchange插件,用于实现消息队列的延迟消息功能。插件要求版本3.5.8以上,通过在创建exchange时指定类型,并设置headers中的x-delay参数来设定延迟时间。与传统的死信队列区别在于,延迟消息提供了更加灵活的消息消费时间控制,避免了消息丢失的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档:点这里

rabbitmq版本必须是3.5.8以上才支持该插件

使用方法

credentials = pika.PlainCredentials(username='mq', password='654321')
connection = pika.BlockingConnection(
        pika.ConnectionParameters(
            host='localhost', port=5672, virtual_host='/',
            credentials=credentials
        )
    )
channel = connection.channel()
channel.exchange_declare(
    exchange='test',
    exchange_type='x-delayed-message',
    durable=True,
    arguments={"x-delayed-type": "fanout"}
)
channel.queue_declare(queue='test', durable=True)
channel.queue_bind(exchange='test', queue='test', routing_key='t')
channel.basic_publish(
    routing_key='t', body=json.dumps({'test': 'test'}),
    properties=pika.BasicProperties(delivery_mode=2, headers={'x-delay': 8000}),
    exchange='test'
)

关键点

创建exchange时指定exchange_typex-delayed-message
添加参数,这里指定exchange类型arguments={"x-delayed-type": "fanout"}

添加消息到队列时添加

properties=pika.BasicProperties(delivery_mode=2, headers={'x-delay': 8000})

delivery_mode 持久化消息
headers={‘x-delay’: 8000} 消息延迟时间毫秒级

和死信的区别

在rabbitmq_delayed_message_exchange插件没出来之前都是使用死信方式来达到延迟队列的效果。

死信是在创建queue是声明这是一个死信队列,里面的消息到一定时间没被消费就会变成死信转发到死信相应的exchange或queue中。

# 死信演示
arguments = {
        'x-message-ttl': 1000 * 10,  # 延迟时间 (毫秒)
        'x-dead-letter-exchange': exchange,  # 延迟结束后指向交换机(死信收容交换机)
        'x-dead-letter-routing-key': queue,  # 延迟结束后指向队列(死信收容队列)
    }
channel.queue_declare(queue=delay_queue, durable=True, arguments=arguments)

exchange是没有消费者的概念的,所以,延迟消息是exchange到queue或其它exchange的延迟。
如果消息延迟到期后不能分配到其它的exchange或queue时消息会被丢弃。
比如设置x-delay为10000,要等10秒后才会出现在exchange的routing_key中。
设置了x-delay后这条消息会一直携带该参数,消费者在处理是可以根据该参数判断是不是延迟消息。
延迟消息可以更灵活的设置消息被消费时间。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值