time to live:过期时间,RabbitMq可以对消息和队列设置ttl.
1.设置消息的ttl
设置消息的ttl有两种方式,一种是针对一条消息,第二种是针对队列中的所有消息。如果两种ttl都设置了,那么就选择tll小的执行。如果消费时间超过ttl,那么消息就不会被消费者消费,从而变成死信。
TTL可以通过参数进行定义。
代码语言:javascript复制@Bean
public Queue AAQueue() {
Map map=new HashMap<>();
map.put("x-message-ttl",6000);
return new Queue("AA",true,false,false,map);
}
针对每条消息设置ttl则需要我们在发送消息的时候设置expiration的属性。
代码语言:javascript复制 /**
* 处理消息体,添加消息id和消息的内容类型
* @param message 消息体
* @return
*/
private Message dealMessage(Object message) {
byte[] body = JSON.toJSONBytes(message, SerializeConfig.globalInstance);
//设置消息相关属性
MessageProperties messageProperties = new MessageProperties();
messageProperties.setMessageId(UUID.randomUUID().toString());
messageProperties.setContentType(MediaType.APPLICATION_JSON_VALUE);
messageProperties.setExpiration("60000");
return new Message(body, messageProperties);
}
2.设置队列的ttl
使用配置x-expires修饰的消息队列会在其指定时间内,未被使用将会被删除!
代码语言:javascript复制 @Bean
public Queue AAQueue() {
Map map=new HashMap<>();
map.put("x-message-ttl",6000);
map.put("x-expires",6000);
return new Queue("AA",true,false,false,map);
}