一:场景:在电商系统中,订单下单30分钟未付款,系统需要取消订单返回库存。这时候我们需要将消息发送到ttl延迟队列内,当消息到达废弃时间后会自动转发到ttl队列内配置的转发Exchange以及RouteKey绑定的队列内完成消息消费
二:延迟队列流程图
三:RabbitmqConfig类配置信息
1.声明了普通消息通知队列的相关Exchange、Queue、Binding等配置,将mall.order.cancel.queue队列通过路由键mall.order.cancel绑定到了mall.order.cancel.exchangeName交换上。
2.声明了延时消息通知队列的相关Exchange、Queue、Binding等配置,将mall.order.direct.ttl队列通过mall.order.direct.ttl 路由键绑定到了mall.order.direct.ttl交换上。
3.配置死信队列,这一步非常重要。
/**
* 订单延迟队列(死信队列)
*/
@Bean
public Queue orderTtlQueue() {
return QueueBuilder
.durable("mall.order.direct.ttl")
.withArgument("x-dead-letter-exchange", "mall.order.cancel.exchangeName")//到期后转发的交换机
.withArgument("x-dead-letter-routing-key", "mall.order.cancel")//到期后转发的路由键
.build();
}
package com.example.demo.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author:
* @Description:
* @Date: Created in 0:31 2020/6/18
* @Modified By:
*/
@Configuration
@Slf4j
public class RabbitmqConfig {