我是 mongo 的新手,所以我在这里尝试实现的目标可能无法实现。到目前为止,我的研究尚无定论...
我的场景如下:我有一个可能有多个实例正在运行的应用程序。这些实例正在处理一些数据,当处理失败时,它们会将失败项的 ID 写入 mongo 集合(“错误”)。
有时我想重新尝试处理这些项目。因此,应用程序会以固定的时间间隔从集合中读取所有 ID,然后删除所有记录。现在,这是一个明显的竞争条件。两个实例可能读取完全相同的数据,这将使要完成的工作加倍。一些ID也可能像这样被遗漏。
我的问题如下:有没有什么方法可以以分布式原子方式读取和删除这些记录?我正在考虑锁定集合,但到目前为止我在 java 驱动程序的文档中没有找到支持。我还尝试寻找类似 findAndDrop()
的方法,但到目前为止还没有成功。
我知道领导者选举等技术很可能会解决这个问题,但我想看看是否可以用更简单的方式完成。
最佳答案
您可以将 BlockingQueue 与多生产者-单一消费者 方法结合使用,因为您有多个生产者来生成 ID 并通过单一消费者删除它们。
关于java - mongo中的原子读取和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44429282/