Springboot整合RabbitMQ-設(shè)置消息過(guò)期時(shí)間TTL
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
作者 | 砒霜拌辣椒
來(lái)源 | urlify.cn/3uiEzq
主要有2種方式:
指定一條消息的過(guò)期時(shí)間。
給隊(duì)列設(shè)置消息過(guò)期時(shí)間,隊(duì)列中的所有消息都有同樣的過(guò)期時(shí)間。
1、指定消息的過(guò)期時(shí)間
@RestController
public class TTLController {
@Autowired
private RabbitTemplate rabbitTemplate;
@PostMapping("/testTTL")
public String testTTL() {
MessageProperties messageProperties = new MessageProperties();
messageProperties.setExpiration("20000"); // 設(shè)置過(guò)期時(shí)間,單位:毫秒
byte[] msgBytes = "測(cè)試消息自動(dòng)過(guò)期".getBytes();
Message message = new Message(msgBytes, messageProperties);
rabbitTemplate.convertAndSend("TTL_EXCHANGE", "TTL", message);
return "ok";
}
}
消息推送到隊(duì)列后,如果指定時(shí)間內(nèi)沒(méi)有被消費(fèi),則會(huì)自動(dòng)過(guò)期。
注意:RabbitMQ只會(huì)對(duì)隊(duì)列頭部的消息進(jìn)行過(guò)期淘汰。如果單獨(dú)給消息設(shè)置TTL,先入隊(duì)列的消息過(guò)期時(shí)間如果設(shè)置比較長(zhǎng),后入隊(duì)列的設(shè)置時(shí)間比較短。會(huì)造成消息不會(huì)及時(shí)地過(guò)期淘汰,導(dǎo)致消息的堆積。
2、給隊(duì)列中的所有消息設(shè)置過(guò)期時(shí)間
@Configuration
public class TTLQueueRabbitConfig {
@Bean
public Queue TTLQueue() {
Map<String, Object> map = new HashMap<>();
map.put("x-message-ttl", 30000); // 隊(duì)列中的消息未被消費(fèi)則30秒后過(guò)期
return new Queue("TTL_QUEUE", true, false, false, map);
}
@Bean
public DirectExchange TTLExchange() {
return new DirectExchange("TTL_EXCHANGE", true, false);
}
@Bean
public Binding bindingDirect() {
return BindingBuilder.bind(TTLQueue()).to(TTLExchange()).with("TTL");
}
}
聲明隊(duì)列時(shí)設(shè)置1個(gè)x-message-ttl的屬性,并設(shè)置過(guò)期時(shí)間,凡是推送到該隊(duì)列中的所有消息,都會(huì)有一個(gè)30秒后過(guò)期的屬性。
可以看到創(chuàng)建的隊(duì)列有TTL的特性,表示該隊(duì)列中的消息會(huì)自動(dòng)過(guò)期。

TTL隊(duì)列
如果同時(shí)指定了Message TTL和Queue TTL,則優(yōu)先較小的那一個(gè)。
RabbitMQ原生API實(shí)現(xiàn)消息自動(dòng)過(guò)期
參考資料
RabbitMQ中的過(guò)期時(shí)間、死信隊(duì)列、延遲隊(duì)列
代碼地址
github:
https://github.com/senlinmu1008/spring-boot/tree/master/rabbitmq-ttl-dlx
gitee:
https://gitee.com/ppbin/spring-boot/tree/master/rabbitmq-ttl-dlx
粉絲福利:Java從入門到入土學(xué)習(xí)路線圖
??????

??長(zhǎng)按上方微信二維碼 2 秒
感謝點(diǎn)贊支持下哈 
