使用RabbitMQ实现延迟关单功能

使用RabbitMQ实现延迟关单功能,第1张

使用RabbitMQ实现延迟关单功能

文章目录
  • 使用RabbitMQ实现延迟关单功能
  • 前言
  • 一、实现架构
  • 二、效果展示
    • 1.超时自动关单
  • 三、代码实现
  • 总结


前言

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


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

一、实现架构

用户进行下单 *** 作(会有锁定商品库存、使用优惠券、积分一系列的 *** 作);
生成订单,获取订单的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实现延迟关单功能的解决方案,核心就是配置延迟队列,死信队列,死信交换机。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/739227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存