sp20250128_150426_606.png

一:实现方式:死信交换机

sp20250128_151018_468.png

sp20250128_152256_390.png

二:延迟队列插件

定义消费者,重点是定义交换机的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;
        });