文章目录
- 使用RabbitMQ实现延迟关单功能
- 前言
- 一、实现架构
- 二、效果展示
- 1.超时自动关单
- 三、代码实现
- 总结
前言
该模块用于解决用户下单以后,订单超时如何取消订单的问题。
提示:以下是本篇文章正文内容,下面案例可供参考
用户进行下单 *** 作(会有锁定商品库存、使用优惠券、积分一系列的 *** 作);
生成订单,获取订单的id;
将该订单发送到RabbitMQ用于保存订单到mysql的队列。
按订单超时时间发送延迟消息给RabbitMQ,消息过期后转发到死信队列,从而实现订单超时后触发取消订单的 *** 作;
如果用户没有支付,进行取消订单 *** 作(释放锁定商品库存、返还优惠券、返回积分一系列 *** 作)。
架构图如下
为方便测试,这里订单呢超时时间设置为20s
https://www.bilibili.com/video/BV1Wu411k7Jb/
延迟关单
三、代码实现
核心代码:设置延迟队列的参数,死信交换机,死信队列
//设置该队列消息的过期时间,并设置死信交换机。该队列的消息过期后将通过死信交换机发往死信队列
@Bean
public Queue orderDelayQueue() {
Map<String, Object> arguments = new HashMap<>();
arguments.put("x-dead-letter-exchange", "order-event-exchange");
arguments.put("x-dead-letter-routing-key", "order.release.order");
arguments.put("x-message-ttl", 20000);
Queue queue = new Queue("order.delay.queue", true, false, false, arguments);
return queue;
}
//死信队列
@Bean
public Queue orderReleaseOrderQueue() {
Queue queue = new Queue("order.release.order.queue", true, false, false);
return queue;
}
总结
例如:以上就是使用rabbitmq实现延迟关单功能的解决方案,核心就是配置延迟队列,死信队列,死信交换机。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)