开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段):发送确认订单失败消息】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/703/detail/12425
发送确认订单失败消息
内容介绍:
一、讲解
二、小结
一、讲解
代码要保证扣减库存、扣减优惠券以及使用余额、确认订单的执行原则性。
如果一旦出现异常,会对异常进行 catch 处理。在 catch 当中,要去发送订单 id 、优惠券的 id、用户的 id 、余额。根据用户 id 查用户对象,才能去回顾余额。
还有要去回对的商品信息,商品的 id 以及商品的数量,这些信息都是需要以消息的方式给它发送到 MQ。
这些信息通常可以再去创建消息的 MQEntity 类。接着去封装分析的信息,设置到属性,将来直接去处理对象。
输入L
ong
order
ID
L
ong couponID
L
ong
user
I
D
L
ong
user
M
oney
L
ong
goodsID
L
ong Inte
ger
goodsNum
这些属性和之前在原始的 pogu 类当中保持一致
提供进行消息发送的实体类后,把方法生成出来。生成后,可以在 case 当中,
M
QEntity mqEntity=new MQEntity();
然后去设置这些数据
修改上述代码类型为BigDecimal,然后进行封装。
还有商品的id :mqEntity.setGoodsID(order.setGoodsID ())
商品数量:mqEntity.setGoodsNum(order.setGoodsNumber ()),
优惠券:mqEntity.setCouponID(order.getCouponsID()),
把要去进行回退的信息都封装 MQEntity,去发送消息即可。
可以去封装私有的方法,叫做新的 sendcancelorder 。首先你要去设置 topic 然后再来 tag。还有 keys, 然后消息的内容。消息的内容可以将 MQnz 转换成字符串发送过去。
tag 可以配置到的配置文件里面去,主题的名字不要进行硬编码,把它放置到涉及到的 properties 配置文件里边,将来读取就行。
那现在数据想在 Java 代码当中使用,首先要把它注入。
输入String
topic
private
S
tring
tag
直接读取配置文件。
直接复制放入 topic 和 tag 配置文件。
第三个是业务标识 key,订单作为当前的业务标识 keys。
key 是 Long 类型,为传输方便,换成字符串。
然后将发送消息的方法实现出来。
输入*方法是用来去发送的订单确认失败消息。
去创建 message 的对象,注意是 lock MQ 的 message。然后把参数设置进去。
有消息的对象后,就可以去发送。首先去注入注意模板类 RocketMQTemplate 。注入进来之后,使用它就可以去发送。
去传送 message 的时候,发现有异常。message 报错,是因为拿到 pro doer ,然后再去发送,就没有问题。然后有异常把异常去处理,
或者是处理异常往上抛也可以。抛出去后进行相关处理,catch 的块放大。
整个消息发送过去之后,catch 当中进行 return 消息发送的结果 message 。
二、小结
整个代码结构是发生异常之后,创建消息的 pogo 类的对象,封装消息的内容。然后去发送订单确认失败的消息。然后封装发送消息的代码。topic 、tag,keys 等等传递过来。发放完之后,做详细日程。