zoukankan      html  css  js  c++  java
  • RabbitMQ入门_09_TTL

    参考资料:https://www.rabbitmq.com/ttl.html

    A. 为队列设置消息TTL

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

    gordon.study.rabbitmq.ttl.TestPerQueueMsgTtl

            Map<String, Object> args = new HashMap<String, Object>();
            args.put("x-message-ttl", 5000);
            consumerChannel.queueDeclare(QUEUE_NAME, false, false, true, args);
    

    如上,只要给队列设置 x-message-ttl 参数,就设定了该队列所有消息的存活时间。时间单位是毫秒,值必须大于等于零(等于零的情况比较复杂,以后再分析)。

    RabbitMQ 保证死消息(在队列中的时间超过设定的TTL时间)不会被消费者获得,同时会尽快删除死消息。

    消息不会在消费者的缓冲区中过期,也就是说,只要队列在消息过期前将消息推送给消费者,消费者就一定能处理到这条消息。

    重新入队(例如被取消确认或信道关闭)的消息的过期时间保留初始值,即不刷新过期时间。

    B. 为单条消息设置TTL

    也可以为每一条消息设置存活时间。

                AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder().expiration("500").build();
                senderChannel.basicPublish("", QUEUE_NAME, properties, message.getBytes("UTF-8"));
    

    AMQP.BasicProperties 在当前版本使用 Builder 模式创建实例,在此,我们通过设置 expiration 的值来设置消息存活时间为 500 毫秒。

    当两种消息 TTL 都被设置时,时间短的 TTL 设置生效。

    为消息设置 TTL 有一个问题:RabbitMQ 只对处于队列头部的消息判断是否过期(即不会扫描队列),所以,很可能队列中已存在死消息,但是队列并不知情。这会影响队列统计数据的正确性,妨碍队列及时释放资源。

    实验发现,RabbitMQ 对队列头部消息的 TTL 扫描是自发的,即使没有 Consumer 连接在队列上,过期消息也会被正确的移除。这种行为对两种消息TTL 都成立。

    C. 队列TTL

    通过设置队列TTL,如果指定时间内队列没被使用,则队列自动被删除。

            Map<String, Object> args = new HashMap<String, Object>();
            args.put("x-expires", 5000);
            consumerChannel.queueDeclare(QUEUE_NAME, false, false, true, args);
    

    队列未被使用指未发生以下行为:

    • 队列没有被重新申明
    • 没有 basicGet 操作发生
    • 没有 Consumer 连接在队列上(哪怕队列一直没有消息)

    特别的,就算一直有消息进入队列,也不算队列在被使用

    RabbitMQ 保证未被使用的队列一定不会在指定的过期时间内被删除,但是不保证能及时删除(试验代码中删除很及时),只能保证在 RabbitMQ 重启后一定已经删除。

    过期时间单位也是毫秒,但是与消息TTL 不同在于,队列TTL 值必须大于零。

  • 相关阅读:
    HomeWork2
    An error I have completed recently
    C#之规格说明书
    App上架审核指南翻译
    使用CollectionView做横向滑动分页效果:
    推荐一些CSS命名规范
    关于让左右2个DIV高度相等
    带有缩略图和文字提示的轮播图
    动画的定义:
    .Net基础篇_学习笔记_第五天_流程控制while循环002
  • 原文地址:https://www.cnblogs.com/gordonkong/p/6953789.html
Copyright © 2011-2022 走看看