一:实现方式:死信交换机
二:延迟队列插件
定义消费者,重点是定义交换机的delay属性
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(name = "delay.queue",durable = "true"),
exchange = @Exchange(name = "delay.direct",type = ExchangeTypes.DIRECT,delayed = "true"),
key = "hi"
)
)
public void listen2(String msg){
log.info("Listener2的延迟消息:{}",msg);
}
定义生产者,使用lambanda返回一个message对象,设置延迟
@Test
void testPublisherDelayMessage(){
//1.创建消息
String message = "hello rabbitmq delay message";
//2.发送消息,利用消息队列的延迟插件实现延迟消息
rabbitTemplate.convertAndSend("delay.direct","hi",message, message1 -> {
message1.getMessageProperties().setDelay(50000);
log.info("延迟消息发送成功");
return message1;
});