技术篇

RabbitMQ的TTL消息详解

2019-03-22  本文已影响28人  若兮缘

TTL说明

TTL演示

这次演示我们不写代码,只通过管控台进行操作,实际测试也会更为方便一些。

1.创建Exchange

选择Exchange菜单,找到下面的Add a new exchange

2.创建Queue

选择Queue菜单,找到下面的Add a new queue

3.建立队列和交换机的绑定关系

点击Exchange表格中的test002_exchange,在下面添加绑定规则

4.发送消息

点击Exchange表格中的test002_exchange,在下面找到Publish message,设置消息进行发送

5.验证

点击Queue菜单,查看表格中test002已经有了一条消息,10秒后表格显示0条,说明过期时间到了消息被自动清除了。

6.设置单条消息过期时间

点击Exchange表格中的test002_exchange,在下面找到Publish message,设置消息的过期时间并进行发送,此时观察test002队列,发现消息5s后就过期被清除了,即使队列设置的过期时间是10s。

TTL代码设置

消息的过期时间设置
        AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
                .expiration("10000") //10s过期
                .build();
        //发送消息
        channel.basicPublish(exchange, routingKey, true, properties, msg.getBytes());
队列的过期时间设置
        //设置队列的过期时间10s
        Map<String,Object> param = new HashMap<>();
        param.put("x-message-ttl", 10000);
        //声明队列
        channel.queueDeclare(queueName, true, false, false, null);
注意事项
  1. 两者的区别是设置队列的过期时间是对该队列的所有消息生效的。
  2. 为消息设置TTL有一个问题:RabbitMQ只对处于队头的消息判断是否过期(即不会扫描队列),所以,很可能队列中已存在死消息,但是队列并不知情。这会影响队列统计数据的正确性,妨碍队列及时释放资源。
上一篇 下一篇

猜你喜欢

热点阅读