我正在构建一个排队系统,通过使用capped_collections和tailable游标在mongodb中实现的堆栈将消息从一个进程传递到另一个进程。
接收进程在capped_collection中循环无限地寻找新文档,当它找到一个时,它会执行一个操作。
我的问题是,如果我实现了多个接收进程,是否有办法保证新文档只能由一个使用tailable游标的进程读取一次?目标是如果有两个接收进程在队列中查找新消息,则避免执行两次操作。我对mongodb编程比较陌生,所以我仍然对它的所有功能都有所了解。
答案 0 :(得分:2)
MongoDB documents包含对实现原子更新的方法的详尽描述。您无法确保只有一个进程接收到新文档,但您可以在接收之后实现原子更新,以确保只有一个进程对其进行操作。
答案 1 :(得分:0)
我最近一直在研究这个问题,我很想知道是否还有其他方法可以让多个读者(消费者)不依赖原子更新。
这就是我想出的:将你的逻辑划分为两个“模块”。第一个模块将负责从tailable游标中获取新文档。第二个模块将负责处理任意文档。通过这种方式,您只能有一个使用者(模块一)获取文档,然后将文档发送给多个文档工作者(第二个模块)。
这两个模块可以在不同的流程中实现,甚至可以在不同的语言中实现。例如,Node.js应用程序可以获取文档并将它们发送到用Python编写的脚本池,以便同时处理文档。