RabbitMQ的高级特性(三)-----TTL
TTL(Time To Live):存活时间/过期时间。
- 当消息到达存活时间后,还没有被消费,会被自动清除。
- RabbitMQ可以对消息设置过期时间,也可以对整个队列(Queue)设置过期时间。
- 如果设置了消息的过期时间,也设置了队列的过期时间,它以时间短的为准。
- 如果对交换机,队列做了修改。需要判断是否在mq中存在,存在先删再加,不存在直接加。否则会报错。io异常
- 队列统一过期-控制后台演示:
- 增加队列,设置过期时间参数
- 增加交换机
- 绑定交换机和队列,设置路由key。
- 发送消息:Delivery mode:2-Persistent表示需要进行持久化
- 查看消息,可以看到消息,但十秒之后,消息自动消失,因为我们设置了十秒消息过期
- 增加队列,设置过期时间参数
- 队列统一过期-代码演示:
- spring-rabbitmq-producer.xml配置
<?xml version="1.0" encoding="UTF-8"?>
- 发送消息
@Test public void testTTL() { for (int i = 0; i < 10; i++) { rabbitTemplate.convertAndSend("test_exchange_ttl","ttl.hehe","message ttl"); } }
- 查看控制台,发现有10条消息,十秒之后自动过期
- spring-rabbitmq-producer.xml配置
- 消息过期-代码演示:
/** * TTL:过期时间 * 1. 队列统一过期 * 2. 消息单独过期 * 如果设置了消息的过期时间,也设置了队列的过期时间,它以时间短的为准。 */ @Test public void testMessageTtl() { // 消息后处理对象,设置一些消息的参数信息 MessagePostProcessor messagePostProcessor = new MessagePostProcessor() { @Override public Message postProcessMessage(Message message) throws AmqpException { //1.设置message的信息 // 第二个方法:消息的过期时间 ,5秒之后过期 message.getMessageProperties().setExpiration("5000"); //2.返回该消息 return message; } }; //消息单独过期 rabbitTemplate.convertAndSend("test_exchange_ttl","ttl.hehe","message ttl....",messagePostProcessor); }