Rabbitmq或Gearman - 选择一个工作队列

bri*_*anz 67 message-queue gearman rabbitmq celery

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

Rabbitmq是构建分布式作业系统的好框架吗?

小智 70

我会说Gearman更适合排队"工作",而RabbitMQ更适合排队"数据".当然,它们都是同一个东西,但它对我的影响方式是,如果你试图"扇出"要完成的工作,并且工人可以独立工作,那么Gearman是更好的方法. .但是,如果您尝试将来自大量数据源的数据提供给更少的数据消费者,RabbitMQ是更好的解决方案.

RabbitMQ的历史,允许Twitter收集大量的消息,并将它们提供给只能保持一个连接打开的硬件旧的SMS网关,速率有限,并且没有重试,这说明了那种问题. RabbitMQ擅长解决问题.


小智 30

这一切都取决于你想要暴露的语义.在RabbitMQ之上完成Gearman所做的事情真的很容易,它可以向独立工作者"传递"消息.

但Gearman是为了目的而建造的.IIUC,Gearman是一个处理作业框架,而不是一个消息系统.还有其他类似的框架,比如Celery,它使用了RabbitMQ.这是一篇关于芹菜文章值得一读.

  • 怀恨在心?:) Celery不仅仅是Python,它可以通过HTTP工作,恕我直言,这是一个比齿轮人用于多语言支持更好的模型(用你想要支持的语言实现工人).用其他语言实现芹菜工作者也很容易,因为芹菜实际上是一种消息协议,其中celeryd恰好是它的Python实现.我不知道你在哪里认为将芹菜与Gearman进行比较是不公平的,但你应该阅读FAQ - 特别是http://bit.ly/cSh6Ys + http://bit.ly/cANwUg - 并提供我们有一些新的论点 (16认同)
  • 不仅我们使用Celery Python,而且它实际上将整个Django框架作为依赖项.根据我的经验,感觉好像作者专门为他的环境编写了它以满足他的特定需求.这不一定是坏事,但它与Gearman或RabbitMQ本身无法公平比较,两者都非常灵活. (7认同)