RabbitMQ-构建消息模型

本文介绍了使用RabbitMQ构建死信队列处理订单超时未支付的问题。通过Spring Boot,当订单创建后发送带有TTL的消息到基本队列,消息过期后自动转至死信队列进行后续处理。详细讲述了设置交换机、路由和队列的方法,以及生产者和消费者的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RabbitMQ-死信队列

基于spring boot

需求(处理订单超时未支付):

  1. 用户下单,给生成一个订单
  2. 30分钟内,如果用户未支付,则取消订单

思路:

  1. 用户下单,生成一个订单
  2. 发消息给 基本队列(消息要设置TTL过期时间)
  3. 消息达到TTL时间,变成死信息,转到死信队列
  4. 处理死信队列里的数据

接着补充完整

  1. 用户下单,生成一个订单
  2. 发送一条消息(设置TLL,目标交换机和目标路由Key)
  3. 根据 Exchange 和 routingKey 路由到 基本队列
  4. 消息在基本队列里待TLL的时间,变成死信息
  5. 根据所在的基本队列 所绑定的 死信交换机和路由,找到死信队列
  6. 消息转到死信队列
  7. 处理消息

消息流转图

1583480369857

如何设置 交换机、路由、队列?

//伪代码
-----------------------------------
声明一个交换机 exchange-base

声明一个队列 queue-base  ,设置他的死信息路由
Map<String, Object> argsMap= Maps.newHashMap();
argsMap.put("x-dead-letter-exchange","死信交换机 exchange-dead");
argsMap.put("x-dead-letter-routing-key","死信路由 dead-routingKey");
return new Queue("queue-base""",true,false,false,argsMap);

将 【交换机exchange-base】 和 【队列queue-base】 绑定 with 【路由 base-routingKey】

-----------------------------------

声明死信交换机 exchange-dead
声明死信队列 queue-dead
将 【死信交换机 exchange-dead】 和 【死信队列 queue-dead】 绑定 with 【路由dead-routingKey】
-----------------------------------

生产者

设置 消息发送到 基本队列 queue-base

设置消息TLS

rabbitTemplate.setExchange("【交换机exchange-base】");
rabbitTemplate.setRoutingKey("【路由 base-routingKey】");
Message message = new Message();
//......
MessageProperties mp=message.getMessageProperties();                 mp.setExpiration(300000);

消费者

只需要监听 【死信队列 queue-dead】

@RabbitListener(queues = {"【死信队列 queue-dead】"},containerFactory = "消费者")
public void consumeExpireOrder(KillSuccessUserInfo info){
 //.....  处理
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值