Rabbitmq或Gearman-选择作业队列


68

在工作中,我们需要构建一个作业服务器来处理诸如发送电子邮件,构建PDF,处理某些数据等工作。显然,我们希望基于某种通用排队系统。我对Gearman很熟悉,这是它要解决的确切问题:将作业放在队列中,工人来接他们。但是,我看到了很多关于Rabbitmq的提及,并且不清楚在这种情况下如何使用它。

Rabbitmq是在其之上构建分布式作业系统的良好框架吗?


4
为此,我最终选择了RabbitMQ以及出色的胡萝卜/芹菜包装,并对自己的选择感到非常满意。一旦确定了您需要或想要配置系统的方式,Celery就会非常神奇并且非常简单。首先,AMQP可能会有些弯腰,但是Celery在将许多复杂性抽象化之前做得很出色,直到您准备好深入研究为止。
brianz 2011年

1
@alexis pdf处理的链接已断开。您能解决这个问题吗?
ihsan 2015年

1
在Sean Crubbs自己的页面上似乎有一篇文章的转贴。
Uwe Mesecke,2015年

Answers:


70

我想说Gearman更适合排队“工作”,RabbitMQ更适合排队“数据”。当然,它们都是同一回事,但是对我来说解决的方法是,如果您试图“散开”待完成的工作,并且工人可以独立工作,那么Gearman是更好的方法。但是,如果您尝试将来自许多来源的数据馈送到更少的数据使用者中,那么RabbitMQ是更好的解决方案。

RabbitMQ的历史可以使Twitter接收大量消息,然后将其馈入有壳的旧SMS网关,这些网关只能保持一个连接处于打开状态,速率受限且没有重试,这说明了这类问题RabbitMQ擅长解决。


30

这完全取决于您要公开的语义。做Gearman在RabbitMQ之上所做的事情真的很容易,它肯定可以将消息“散布”给独立的工作人员。

但是Gearman是为特定目的而构建的。IIUC,Gearman是用于处理作业框架,而不是这样的消息传递系统。还有其他此类框架,例如Celery,在后台使用RabbitMQ。这是一篇有关芹菜文章,值得一读。


8
不仅我们仅使用Celery Python,而且实际上它具有整个Django框架作为依赖项。根据我的经验,似乎作者是为满足自己的特定需求而专门编写的。这不一定是一件坏事,但与Gearman或RabbitMQ本身(这两者都非常灵活)相比并不是一个公平的比较。
jamieb 2010年

16
怀恨在心吗?:) Celery不仅限于Python,它还可以通过HTTP工作,与Gearman用于多语言支持(使用您要支持的语言的实现工作者)相比,IMHO是更好的模型。用其他语言实现celery worker也很容易,因为celery实际上是一个消息协议,其中celeryd恰好是它的Python实现。我不知道你的想法,这是不公平的芹菜比较Gearman的,但你应该阅读常见问题-尤其是bit.ly/cSh6Ys + bit.ly/cANwUg -和一些新的论点提供给我们
asksol

1
如果“真的”是关于更好的模型,我们所有人都将使用Gopher ...而不是HTTP :)
Abhishek Dujari 2012年

1
答案中提供的链接现在显示为404。您可以更新吗?
2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.