回退库存流程分析|学习笔记

简介: 快速学习回退库存流程分析

开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段)回退库存流程分析】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/703/detail/12428


回退库存流程分析


1、实现接口修改为 RocketMQListener 和之前所做的 demo 一样需要指定当前泛型泛型就是对应的消息发送方消息发送的类型 message也可以指定 message 类型作为泛型

@Override

public void onMessage(Message message)

重写的方法里面就会去接收 message 类型的消息但是需要修改 message 为 MessageExt,pogo 类,MessageExt是 message 的子类用它接收 message 类型的消息也可以用它的好处是有 msgid 消息的 id将来会用消息的 id进行存储

image.png

@Override

public void onMessage(Messageext message)

更改的是优惠卷shop-goods-service,shop-order-service,shop-user- service都要进行修改指定类型

public class CanceIMQListener implements RocketMQListener<MessageExt>{

@Override

public void onMessage(MessageExt messageExt) {

2、回退库存

image.png

首先接收到消息后解析消息内容查询消息消费记录为保证消息处理的密动性将来会将处理的消息存到数据库中接收到消息后不是进行消费而是判断消息有没有进行处理如果已经做过处理就不用再进行处理牵扯回退库存牵扯回退优惠卷以及回退余额如果服务端发送了重复的消息如果进行重复消费会对业务造成影响所以消息的密动性是需要在消费端进行保证的查询消息消费记录就是查询 trade_mq_consumer_log 表

表里面有 msg_idgroup_name,msg_tagmsg_keymsg_body 消息的主题内容以及目前消息处理的状态如果根据 group_name,msg_tagmsg_key 查询到已经处理过的消息那么当接收到相同消息的时候就可以直接舍弃掉这样就可以保证密动性consumer_times 指的是消费的次数最多不能超过三次可以消费失败但是需要进行新的处理最终失败的次数不能超过三次超过三次也会进行舍弃consumer_timestamp 消费时间remark 备注的信息

image.png

所以进行正式的消息处理之前先进行查询如果查询到记录要进行判断判断当前的状态如果是已经处理成功的就直接结束如果是正在处理的也直接结束不用再做任何动作如果是处理失败就是之前处理过消息但是发生了异常判断当前失败的次数不足三次使用数据库的乐观锁将消息处理状态改为正在处理使用消息库的乐观锁是因为如果在高并发的情况下多个线程同时进行消息的处理要在数据库更新这里保证互视性

image.png

左边的分支处理过的消息

image.png

如果查询消息消费记录没有查询到说明当前消息没有处理过要在数据库中添加一条已经正在处理的消息和左边的流程保持一致处理回退库存就是将消息中的商品数量加上

image.png

注意将当前的消息处理状态改为成功

image.png

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
修正flowable的发起流程中根据用户信息流转不同的流程
修正flowable的发起流程中根据用户信息流转不同的流程
19 0
|
2月前
|
消息中间件 架构师 NoSQL
以架构师的视角,深入剖析如何设计订单超时自动取消的功能
我们在美团 APP 下单,假如没有立即支付,进入订单详情会显示倒计时,如果超过支付时间,订单就会被自动取消。 这篇文章,笔者想以架构师的视角,深入剖析如何设计订单超时自动取消的功能。
以架构师的视角,深入剖析如何设计订单超时自动取消的功能
|
2月前
|
消息中间件 NoSQL 中间件
关于实现订单超时的几种方案(详细细节版)
关于实现订单超时的几种方案(详细细节版)
120 0
关于实现订单超时的几种方案(详细细节版)
|
9月前
|
C# C++
[记录]c/c++和c#联调常见问题
[记录]c/c++和c#联调常见问题
|
消息中间件 存储 资源调度
订单超时处理的几种方案及分析
描述业务常见的订单超时处理的几种方案及分析
31115 19
订单超时处理的几种方案及分析
|
程序员 测试技术 数据库
实战! 项目单据确认状态未更新排查
实战! 项目单据确认状态未更新排查
|
JSON 前端开发 中间件
MyCat - 订单模块 - 提交订单业务分析 | 学习笔记
快速学习 MyCat - 订单模块 - 提交订单业务分析
106 0
MyCat - 订单模块 - 提交订单业务分析 | 学习笔记
|
消息中间件 RocketMQ 开发者
校验订单流程分析|学习笔记
快速学习校验订单流程分析
135 0
校验订单流程分析|学习笔记
|
前端开发
前端工作小结76-整理订单的重置逻辑
前端工作小结76-整理订单的重置逻辑
62 0
前端工作小结76-整理订单的重置逻辑
|
存储 供应链 数据可视化
聊聊支付流程的设计与实现逻辑
通常在业务体系中,都会或多或少的涉及到支付相关的功能;对于一些经验欠缺同学来说,最紧张的就是面对这类支付结算的逻辑,因为流程中的任何细节问题,都可能引发对账异常的情况;
645 0
聊聊支付流程的设计与实现逻辑