RockerMQ 的异步消费

         项目终于开发完了,明天就开始联调了,总结下rocketma的使用场景和使用方法。

        业务正常流程是这样的:用户下单 - 扣减库存 - 生成待支付订单、修改数据库库存 - 调用支付网关 - 支付成功后回调 - 修改订单数据 - 调发码平台购票,流程走完。

mq这里要做的是在生成待支付订单后将消息延迟10分钟放到mq,然后做一个异步监听,将监听到的数据去库里面查一遍有没有支付完成,如果没有支付完成就调用支付网关查询接口,没支付就订单取消,增加库存(redis和mysql),支付了就更新订单数据。

        这么做的目的是防止有很多待支付的订单占用库存数量。

大致就业务就是这样,我这里用的是rocketmq-spring-boot-starter 2.1.1的版本

Producer:

/**
* destination: topic
* message: 消息内容
* sendCallback: 回调方法,可以用在做重试补偿机制
* timeout: 超时时间
* timeout: 延迟登记为18个:1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
*/
rocketMQTemplate.asyncSend(String destination, Message<?> message, SendCallback sendCallback, long timeout, int delayLevel)

Consumer:主要是实现RocketMQListener接口的onMessage(T var1)方法

@Service
@RocketMQMessageListener(consumerGroup = "producer-name", topic = "topic-name")
public class OrderConsumerListener implements RocketMQListener<String> {

    @Override
    public void onMessage(String msg) {

         log.info("延迟消费信息:::{}", msg);
         //拿到业务数据,根据业务判断是否需要处理

         //先查询自己订单,如果没有支付完成再查询支付网关
        if(count > 0){//没支付
            //主动查询支付网关,拿到state:是否支付成功状态
            if(state == 1){//成功
                //修改订单状态
            }else{//待支付
                //取消订单,增加库存(redis和mysql)(跟redis库存保持一直)
            }
        }
    }

}

        大致就是这样 。

        今天发现了一个调试接口的软件,自己感觉要比postman好用,功能还挺全面的,分享一下

名字:ApiPost,我已经在用了。也安利给公司的小伙伴使用了。具体有多好用我就不说了,自行体会吧!!!

下载地址:下载中心-ApiPost-中文版接口调试与文档管理工具

文档:首页 - APIPOST使用文档


版权声明:本文为gaohechao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。