使用RabbitMQ实现延迟关单功能

使用RabbitMQ实现延迟关单功能

Gitee地址:https://gitee.com/yuyuuyuy/micro-mall


文章目录


前言

该模块用于解决用户下单以后,订单超时如何取消订单的问题。


提示:以下是本篇文章正文内容,下面案例可供参考

一、实现架构

用户进行下单操作(会有锁定商品库存、使用优惠券、积分一系列的操作);
生成订单,获取订单的id;
将该订单发送到RabbitMQ用于保存订单到mysql的队列。
按订单超时时间发送延迟消息给RabbitMQ,消息过期后转发到死信队列,从而实现订单超时后触发取消订单的操作;
如果用户没有支付,进行取消订单操作(释放锁定商品库存、返还优惠券、返回积分一系列操作)。

架构图如下
在这里插入图片描述

二、效果展示

1.超时自动关单

为方便测试,这里订单呢超时时间设置为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实现延迟关单功能的解决方案,核心就是配置延迟队列,死信队列,死信交换机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值