在工作中,我们需要构建一个工作服务器,用于发送电子邮件、构建 PDF、处理一些数据等。显然,我们希望构建某种通用排队系统。我对 Gearman 很熟悉,而这正是它试图解决的问题:将工作放在一个队列中,让工人来接他们。但是,我看到很多提到 Rabbitmq 并且不清楚它在这种情况下是如何使用的。
Rabbitmq 是一个很好的框架来构建分布式作业系统吗?
在工作中,我们需要构建一个工作服务器,用于发送电子邮件、构建 PDF、处理一些数据等。显然,我们希望构建某种通用排队系统。我对 Gearman 很熟悉,而这正是它试图解决的问题:将工作放在一个队列中,让工人来接他们。但是,我看到很多提到 Rabbitmq 并且不清楚它在这种情况下是如何使用的。
Rabbitmq 是一个很好的框架来构建分布式作业系统吗?
我会说 Gearman 更适合排队“工作”,而 RabbitMQ 更适合排队“数据”。当然,它们实际上是一回事,但对我来说,如果你想“扇出”要完成的工作,并且工人可以独立工作,Gearman 是更好的方法. 但是,如果您试图将来自大量数据源的数据提供给更少的数据消费者,那么 RabbitMQ 是更好的解决方案。
RabbitMQ 的历史,作为一种允许 Twitter 接收突发负载的消息,并将它们馈送到只能保持一个连接打开、速率受限且没有重试的硬壳旧 SMS 网关的东西,说明了那种问题RabbitMQ 擅长解决。
这完全取决于您要公开的语义。Gearman 在 RabbitMQ 之上所做的事情真的很容易,这当然可以将消息“扇出”给独立的工作人员。
但 Gearman 是为目的而设计的。IIUC,Gearman 是一个处理作业的框架,而不是一个消息传递系统。还有其他这样的框架,例如 Celery,在底层使用 RabbitMQ。这是一篇关于芹菜的文章,值得一读。