2、由于消息是在事务提交之前提交,发送的消息内容是订单实体的内容,会造成在消费端进行消费时如果需要去验证订单是否存在时可能出现订单不存在。
3、消息发送可以考虑异步发送。
方案二:
由于存在上述问题,在MQ不支持事务消息的前提条件下,可以采用下面的方式进行优化。
然后在控制器层,使用异步发送,将消息发送,并在消息发送成功后,更新待发送状态为已发送。
然后通过定时任务,扫描待发送,结合创建时间的记录(小于当前时间5分钟的消息待发送记录),进行消息发送。
方案弊端:
1、消息有可能重复发送,但在消费端可以通过唯一业务编号来进行去重设计。
2、实现过于复杂,为了避免 极端情况下的消息丢失,需要使用定时任务。
方案三:基于RocketMQ4.3版本事务消息
额外需
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
要实现事务会查监听器:TransactionListener&