为了账号安全,请及时绑定邮箱和手机立即绑定

跪求!同时有数据库和消息队列,消息队列失败怎么回退?感激不尽

跪求!同时有数据库和消息队列,消息队列失败怎么回退?感激不尽

哔哔one 2019-07-28 12:18:54
比如下面有段代码://数据库操作XXXX//队列操作QQQQ数据库操作失败了可以利用事务rollback但如果数据库操作成功,而队列操作失败,这怎么rollback?或者这个时候应该采取什么方案来保证两个操作的事务性。
查看完整描述

2 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

这是一个典型的分布式事务的应用场景,如果你们系统中引入了分布式事务很简单。如果没引入,可以用一下的做法实现:
数据库加个字段标识MQ的操作状态
先写入数据库,将这个状态设置为待确认
写入MQ,成功后设置MySQL状态为已确认
如果这个MQ失败,可以尝试重试,如果重试失败,这个状态设置为失败
这样不会影响你的业务逻辑。
                            
查看完整回答
反对 回复 2019-07-28
?
智慧大石

TA贡献1946条经验 获得超3个赞

楼上明显错误,两者不相关,你难道要在队列里面抛异常?消息队列最好做到异步处理,不然你就拖累数据库了。异步里面单独做队列推送成功失败的验证,然后做回滚处理。具体要看你业务需求了
                            
查看完整回答
反对 回复 2019-07-28
  • 2 回答
  • 0 关注
  • 323 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信