RabbitMQ设置过期时间

针对消息的过期时间设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pika

credentials = pika.PlainCredentials("guest", "guest")
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost', credentials=credentials))
channel = connection.channel()
channel.queue_declare(queue='task_queue', durable=True)

for i in range(1, 100):
properties = pika.BasicProperties(delivery_mode=2, )
properties.expiration = '6000'
body = 'test'.format(i).encode('utf-8')
channel.basic_publish(
exchange='',
routing_key='task_queue',
body=body,
properties=properties
)


connection.close()

  • channel.queue_declare(queue='task_queue', durable=True) 生产和消费要定义的一致

  • properties = pika.BasicProperties(delivery_mode=2, ) properties.expiration = '6000'

​ 1. delivery_mode 为1, 或者 pika.DeliveryMode.Transient 非持久化,重启丢失.

​ 2. delivery_mode 为2, 或者 pika.DeliveryMode.Persistent 持久化,写入磁盘.

​ 3. properties.expiration 单位为毫秒,值必须是str 这是 AMQP 0-9-1 协议的规范要求.

通过队列设置队列中所有消息的过期时间

1
2
3
4
5
6
7
8
9
import pika

credentials = pika.PlainCredentials("guest", "guest")
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost', credentials=credentials))
channel = connection.channel()

arguments = {}
arguments['x-message-ttl'] = 2000
channel.queue_declare(queue='task_queue', durable=False,arguments=arguments,auto_delete=False)
  • x-message-ttl 单位毫秒, 值类型为int, 设置了这个之后队列中所有的消息都有一个默认的过期时间2秒钟

RabbitMQ设置过期时间
https://kingjem.github.io/2025/07/23/RabbitMQ设置过期时间/
作者
Ruhai
发布于
2025年7月23日
许可协议