首页 > 代码库 > rabbitmq 学习记录 -- TTL
rabbitmq 学习记录 -- TTL
派猴子来的救兵
queue本身的TTL
注意, 这里说的是queue本身的TTL. 不是说里面的消息
声明一个队列的时候, 可以用x-expires指定队列的TTL值. 过期之后, 这个队列就被删掉了.
不管里面是不是还有消息没有消费
#!/usr/bin/env python# -*- coding: utf-8 -*-‘‘‘the queue exists for only 5 seconds, whether there is messages!‘‘‘import pikaimport sysdef main(): body = ‘ ‘.join(sys.argv[1:]) or ‘Hello World‘ connection = pika.BlockingConnection( pika.ConnectionParameters( host=‘localhost‘)) channel = connection.channel() channel.queue_declare(queue=‘ttlhello‘,arguments={"x-expires":5000}) # ttl 5 second channel.basic_publish(exchange=‘‘, routing_key=‘ttlhello‘, body=body, ) connection.close()if __name__ == ‘__main__‘: main()
跑一下看看效果
# python queueTTL.py ;sleep 1; rabbitmqctl list_queues; sleep 6;rabbitmqctl list_queues Listing queues ... ttlhello 1 Listing queues ...
Per-Queue Message TTL
这个也是队列的属性, 而不是消息的. 队列中的所有消息过了TTL就会被删除.
#!/usr/bin/env python# -*- coding: utf-8 -*-‘‘‘the messages in the queue exist for only 5 seconds‘‘‘import pikaimport sysdef main(): body = ‘ ‘.join(sys.argv[1:]) or ‘Hello World‘ connection = pika.BlockingConnection( pika.ConnectionParameters( host=‘localhost‘)) channel = connection.channel() channel.queue_declare(queue=‘ttlmessagehello‘,arguments={"x-message-ttl":5000}) # ttl 5 second channel.basic_publish(exchange=‘‘, routing_key=‘ttlmessagehello‘, body=body, ) connection.close()if __name__ == ‘__main__‘: main()
跑一下看看效果
# python queueMessageTTL.py; rabbitmqctl list_queues; sleep 6; rabbitmqctl list_queues Listing queues ... ttlmessagehello 1 Listing queues ... ttlmessagehello 0
Per-Message TTL
发送消息的时候, 也可以给每条消息一个TTL的属性.
messageTTLSend.py
#!/usr/bin/env python# -*- coding: utf-8 -*-import pikaimport sysdef main(): body = ‘ ‘.join(sys.argv[1:]) or ‘Hello World‘ connection = pika.BlockingConnection( pika.ConnectionParameters( host=‘localhost‘)) channel = connection.channel() channel.queue_declare(queue=‘hello‘) channel.basic_publish(exchange=‘‘, routing_key=‘hello‘, body=body, properties=pika.BasicProperties( expiration="5000" ) ) connection.close()if __name__ == ‘__main__‘: main()
跑一下看看效果
# python messageTTLSend.py; rabbitmqctl list_queues; sleep 6; rabbitmqctl list_queues; Listing queues ... hello 1 Listing queues ... hello 0
最后, 如per-message ttl 和 per-queue message ttl不一样, 按小的来.
rabbitmq 学习记录 -- TTL
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。