TTL队 列
如果设置了消息的过期时间,也设置了队列的过期时间,它以时间短的为准。
队列过期后,会将队列中所有消息全部移除。
![在这里插入图片描述](https://img-blog.csdnimg.cn/af65651d13544fd594f94730555c5dc1.jpeg#pic_center)
消息属性设置TTL(消息单独过期)
使用参数expiration(单位:ms 毫秒)来设置单个消息的过期时间。
@SpringBootTest(classes = TestApplication.class)
@Component
@Slf4j
public class TTLExpiredTest {
@Autowired
private RabbitTemplate rabbitTemplate;
private static final String MESSAGE = "testTTLExpired, web.exchange.three message";
/**
* 如果设置了消息的过期时间,也设置了队列的过期时间,它以时间短的为准。
* 队列过期后,会将队列中所有消息全部移除。
*/
@Test
public void testTTLExpired() {
MessageProperties messageProperties = new MessageProperties();
// 设置单个消息过期60s
messageProperties.setExpiration("60000");
Message message = new Message(MESSAGE.getBytes(StandardCharsets.UTF_8), messageProperties);
rabbitTemplate.convertAndSend("web.exchange.three", "", message);
/* rabbitTemplate.convertAndSend("web.exchange.four", "", "testTTLExpired,是否会移除过期的消息");
rabbitTemplate.convertAndSend("web.exchange.four", "", message);
rabbitTemplate.convertAndSend("web.exchange.four", "", "testTTLExpired,是否会移除过期的消息");*/
}
}
队列设置消息TTL(队列统一过期)
使用参数 x-message-ttl (单位:ms 毫秒)对整个队列消息统一过期。
1、RabbitMQ界面显示过期标识
![在这里插入图片描述](https://img-blog.csdnimg.cn/1e8b9566a7be4d9dbb9df1f3bc153ded.png)
2、配置文件设置(starter-rabbitmq)
rabbitmq:
rabbit-infos:
- routing-key: web.socket
queue:
name: web.queue.test
arguments:
x-message-ttl: 5000
exchange:
name: web.exchange.test
type: HEADERS