本文章通过MQ队列来实现秒杀场景
整体的设计如下图,整个流程中对于发送发MQ失败和发送到死信队列的数据未做后续处理
1、首先先创建MQ的配置文件
@Configuration
public class RabbitConfig {
public static final String DEAD_LETTER_EXCHANGE = "deadLetterExchange";
public static final String DEAD_LETTER_QUEUEA_ROUTING_KEY = "dead.#";
public static final String DEAD_LETTER_QUEUEA_NAME = "deadQueue";
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private ConnectionFactory connectionFactory;
@Bean
public TopicExchange topicExchange(){
return new TopicExchange("seckill_topic",true,false);
}
// 声明死信Exchange
@Bean("deadLetterExchange")
public DirectExchange deadLetterExchange(){
return new DirectExchange(DEAD_LETTER_EXCHANGE);
}
@Bean("seckillQueue")
public Queue seckillQueue(){
Map<String,Object> args = new HashMap<>();
args.put("x-dead-letter-exchange", DEAD_LETTER_EXCHANGE);
// x-dead-letter-routing-key 这里声明当前队列的死信路由key
args.put("x-dead-letter-routing-key", DEAD_LETT