RabbitMQ延遲消息實現 配置類 向死信隊列添加消息,等待5秒後消息發送給交換機 接收消息

配置類

package com.changgou.order.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/****
 * @Author:gzy
 * @Description:
 * @Date 2019/9/5 10:50
 *****/
@Configuration
public class RabbitMQConfig {


    //延遲消息
    public static final String RELAY_QUEUE = "relay_queue";
    //交換機名稱
    public static final String CANCEL_ORDER_PAY_EXCHANGE = "cancel_order_pay_exchange";

    //隊列名稱
    public static final String CANCEL_ORDER_QUEUE = "cancel_order_queue";

    //實例化延遲消息,將消息隊列綁定到CANCEL_ORDER_PAY_EXCHANGE交換機
    @Bean
    public Queue relayQueue(){
        return QueueBuilder.durable(RELAY_QUEUE)
                .withArgument("x-dead-letter-exchange",CANCEL_ORDER_PAY_EXCHANGE)
                .withArgument("x-dead-letter-routing-key","")
                .build();
    }


    //接收延遲消息隊列消息的隊列
    @Bean
    public Queue cancelOrderQueue(){
        return new Queue(CANCEL_ORDER_QUEUE);
    }
    //實例化路由交換機
    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange(CANCEL_ORDER_PAY_EXCHANGE);
    }
    //將普通隊列綁定到交換機
    @Bean
    public Binding binding(){
        return BindingBuilder.bind(cancelOrderQueue()).to(directExchange()).with("");
    }


}

向死信隊列添加消息,等待5秒後消息發送給交換機

//給死信發消息
rabbitTemplate.convertAndSend(RabbitMQConfig.RELAY_QUEUE, (Object)order.getId(), new MessagePostProcessor() {
    @Override
    public Message postProcessMessage(Message message) throws AmqpException {
        message.getMessageProperties().setExpiration("5000");//5秒
        return message;
    }
});

接收消息

 /**
     * 5分鐘後  接收到消息
     * @param orderId
     */
    @RabbitListener(queues = {RabbitMQConfig.CANCEL_ORDER_QUEUE})
    public void cancelOrder(String orderId){
         System.out.println("接收到訂單ID:" + orderId);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章