MongoDB作为队列服务?
我很想了解更多关于MongoDB作为队列服务的实际应用体验,如果您为此使用MongoDB,能否分享您的想法以及使用它的环境?我将MongoDB用作电子邮件发送的队列服务。 很快它将以以下方式工作:MongoDB作为队列服务?,mongodb,web,queue,social,Mongodb,Web,Queue,Social,我很想了解更多关于MongoDB作为队列服务的实际应用体验,如果您为此使用MongoDB,能否分享您的想法以及使用它的环境?我将MongoDB用作电子邮件发送的队列服务。 很快它将以以下方式工作: 当新消息出现时,我将其存储在mongodb中 然后,后台作业通过原子操作从mongodb加载消息,并将标志Processing设置为true,因此它不会处理同一消息两次(因为我的后台作业并行运行多个线程) 发送电子邮件后,我将从mongodb中删除该文档 您还可以记录每条消息的失败次数,并在尝试3次失
Processing
设置为true,因此它不会处理同一消息两次(因为我的后台作业并行运行多个线程)您可以对不同的集合执行相同的操作。主要的建议似乎是使用a-mongo驱动程序,它有有效的方法等待一个有上限的集合,这样客户就不会不断地进行轮询。我知道这个问题是从2012年开始的,但是在我自己的研究中,我发现了这篇文章,我只想告诉其他任何用户,serverdensity的开发人员取代了rabbitmq,代之以使用mongodb的简单排队系统 这里有一篇详细的文章:
我搜索了很多,找到了JavaScript版本。但是我想要一个围棋版本,所以
Go中的一个简单实现,包括轮询消息的管理器:这里是一个简单的消息队列 它是评估各种消息队列系统性能的一部分 单线程、单节点设置可实现7900毫秒/秒的发送和1900毫秒/秒的接收 这是我的 它的工作原理是在封顶集合上使用尾随光标或轮询正常集合。
在一些项目中使用了它,在这些项目中,我希望简化我的堆栈并获得相当好的结果。当然,正如有人已经提到的,直到您达到了原子查找和修改的极限,但这可以通过各种技术来解决几年来,我一直在改进redis和/或mongodb之上的作业队列实现,并对负载平衡和HA提供了良好的支持。我决定使用node.js进行实现,这似乎非常适合。我提出了两个实体:
- node.js库()能够在redis和mongodb之上管理队列和集群。它还提供了mongodb上队列的实现,通过对mongodb的读写进行bucket处理,突破FindModify限制
- node.js()中还提供了一个服务器,它基本上在node.js库的顶部提供STOMP和REST iterface。这台服务器可以被看作是SQS之类的替代品
显然,该库仅限于node.js,但服务器可以从几乎任何可以说HTTP的地方使用。在MongoDB之上而不是在专用MQ之上构建此服务的另一个动机是,它使您无需再从应用程序中与另一个服务交互。唯一的主要问题是吞吐量,它将低于专为MQ而设计的性能。我还在Mongo上寻找一个好的Q impl。如果您的后台作业在将处理标志设置为true之后,但在它能够处理消息之前崩溃或重新启动,您会怎么做?@cirrus这也是我想知道的。我计划区分三种状态(新状态/进行中状态/完成状态),并保留最后修改日期/时间。然后,新员工(或专用garbace gollector)可以开始查找“正在进行”的消息,这些消息的最后修改时间远远超过过去,然后将其重置为“新”。@andrew。这些都是用q系统解决的问题。我只是想知道你的impl采用了什么方法。这不是消息处理中的一个“bug”,我考虑的更多的是使处理能够适应瞬态过程。我不知道在Mongo做一个全功能Q的最好方法是什么。看我的Q:@Marian我想你说得对。不过,您可能仍然需要幂等运算,因为您仍然可以多次处理同一消息。您将至少得到一次语义。不幸的是,您链接到的页面已不再可用available@Tilo回复太迟了,网络档案中的链接:我们已经达到了MongoDB中原子查找和修改操作的极限,并转移到Kafka:版主再次伤害了社区,你为什么要关闭这样的问题?真是德怀特·施鲁特