记录状态变更,事务问题

有这么个情景。
1查询出等待发送消息的记录
2变更该条记录状态为正在发送(一但进入正在发送则该条记录状态不能被改变:入取消发送)
3通过调用第三方请求发送消息
4如果发送成功更新为发送成功,如果失败更新为发送失败
请问有什么办法可以较好的保证记录不会被重复发送,发送成功后能确保记录状态变更为发送成功

阅读 3.3k
3 个回答

这个貌似不是事务的问题,要看你的设计了,比如List放等待发送消息的记录,遍历list,调用第三方接口后,修改状态为正在发送,发送成功,更新该条数据的状态入库,发送失败,把失败的数据放在一个缓冲区,启动一个线程,重发这些失败的数据。

这个场景更像是消息队列。
既然每条记录都有状态位,使用MySQL更新就行,MySQL有自己的隔离级别与锁机制,单条更新不会出问题。

控制程序:
一个监控程序定时扫表,将未处理的记录取出,变更状态为正在发送。
另起一个或者多个进程发送消息,并将处理结果变更到MySQL中。

建议:
消息队列不建议使用MySQL,每次处理时都有大量的写操作,MySQL压力较大。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题