针对消息的过期时间设置
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秒钟