0

我有一个系统,其中包括 MySQL 作为数据库和用于组织异步数据处理的 RabbitMQ。有两个进程(在两个不同的容器中)使用相同的记录。第一个更新数据库事务中的记录状态并将消息发送到兔子队列。第二个进程从数据库中获取记录并完成一些工作。问题是第二个进程可以在第一个进程完成记录更新之前从队列中读取消息。

目前,为了避免这个问题,第二个进程检查记录的状态,如果它不对应于目标值,则该进程通过将其重新发送到同一队列来等待更新。

发生此行为是因为发送到队列是在事务上下文中执行的。如果我将发送移到事务外的队列,可能会出现错误或者db事务完成后进程中断,数据库中的状态会改变,但消息不会发送到队列,第二个进程不会处理这条记录。

你有什么建议来解决这个架构问题?

4

0 回答 0