【发布时间】:2020-05-11 15:46:50
【问题描述】:
我有两个相同的微服务实例正在运行。这些微服务使用 reactivemongo 库引用一个 mongodb 集合。这个 mongodb 集合正在模拟一个队列。因此,每个微服务都会挑选队列中的最新项目,然后对其进行处理(不能更改此设计,因为这是公司提出的,他们不想更改)。
我担心两个实例会选择(即读取)队列中的相同元素,然后开始对其进行处理。他们说由于 mongodb 的原子性特性,这不会发生。但对我来说,原子操作意味着数据库操作要么完全发生,要么根本不发生。那么在我所描述的这种情况下,这将有什么帮助呢?我认为不会。
他们还说,每个实例在尝试读取文档进行处理时,如果找到一个,就会将状态从 Todo 更新为 In-Progress。他们说这意味着如果另一个实例出现,它不会选择同一个文档,因为状态不再在 Todo 中。
似乎他们的意思是,在将文档状态从 ToDo 更新为 In-Progress 的原子操作期间,即使由于原子性而尚未发生更新,其他实例也无法读取同一行。 mongodb是这样工作的吗?
【问题讨论】:
标签: mongodb microservices