猿问

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

比如下面有段代码:
//数据库操作
XXXX
//队列操作
QQQQ
数据库操作失败了可以利用事务rollback
但如果数据库操作成功,而队列操作失败,这怎么rollback?
或者这个时候应该采取什么方案来保证两个操作的事务性。
哔哔one
浏览 324回答 2
2回答

哆啦的时光机

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

智慧大石

楼上明显错误,两者不相关,你难道要在队列里面抛异常?消息队列最好做到异步处理,不然你就拖累数据库了。异步里面单独做队列推送成功失败的验证,然后做回滚处理。具体要看你业务需求了
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答