首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RabbitMQ消息超时时间、队列消息超时时间、队列超时时间

RabbitMQ消息超时时间、队列消息超时时间、队列超时时间

作者头像
似水的流年
发布2019-12-05 18:49:01
7.1K0
发布2019-12-05 18:49:01
举报
文章被收录于专栏:电光石火电光石火

一、为队列设置消息TTL

TTL是 Time-To-Live 的缩写,指的是存活时间,RabbitMQ可以为每个队列设置消息的超时时间。

20180703181326_123.jpg
20180703181326_123.jpg

代码中声明如下:

20180703181326_644.jpg
20180703181326_644.jpg

只要给队列设置x-message-ttl 参数,就设定了该队列所有消息的存活时间,时间单位是毫秒,值必须大于等于0 RabbitMQ保证死消息(在队列中的时间超过设定的TTL时间)不会被消费者获得,同时会尽快删除死的消费者。 消息不会在消费者的缓冲区中过期,也就是说,只要队列在消息过期前将消息推送给消费者,消费者就一定能处理到这条消息。 重新入队(例如被取消确认或者信道关闭或拒绝并重新入队)的消息的过期时间保留初始值,即不刷新过期时间。

二、为单条消息设置TTLTTL

也可以为单条消息设置消息存活时间。 1. AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); 2. builder.expiration("3000"); 3. AMQP.BasicProperties build = builder.build();

当前版本采用的是Builder模式创建实例,在此我们通过expration 的值设置消息的存活时间为3秒。 当队列消息的TTL 和消息TTL都被设置,时间短的TTL设置生效。 为消息设置TTL有一个问题:RabbitMQ只对处于队头的消息判断是否过期(即不会扫描队列),所以,很可能队列中已存在死消息,但是队列并不知情。这会影响队列统计数据的正确性,妨碍队列及时释放资源。

1redfd.jpg
1redfd.jpg

向队列中添加110条消息,前10条为没有超时时间的消息,后100条为设置了超时时间的消息

fdcg.jpg
fdcg.jpg

证明:如果队头为没有设置超时时间的消息,即使后面消息已经超时也不会被移除队列。

三、设置队列的TTL(队列超时时间)TTL

sdfsf.png
sdfsf.png

编程时设置方式

111.png
111.png

队列未被使用是指未发生如下行为: 1、队列没有被重新申明 2、没有basicGet操作发生 3、没有Consumer连接在队列上(哪怕队列一直没有消息) 特别的:就算一直有消息进入队列,也不算队列在被使用。 RabbitMQ 能保证未被使用的队列一定不会在指定的时间内内删除,但是不能保证能及时删除,只能保证在RabbitMQ重启后一定已经删除。 过期时间单位也是毫秒,但是与消息TTL不同在于 队列TTL值必须大于零。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档