Ruby on Rails中的消息队列

39
人们在其Rails应用程序中使用哪些消息队列,以及选择它背后的驱动力是什么。Twitter最近因其内部队列Starling失效而引起的公众关注是否会影响任何现有的设计决策。
我正在开发一个需要消息队列来处理一些后台任务的应用程序,我没有做太多这方面的工作,过去看到的大部分内容都是关于Starling和Workling的,坦率地说,该应用程序不是很大,这个解决方案可能已经足够了,但是我想获得集成最佳解决方案的经验,因为我相信我将在某个时候将其集成到更大的应用程序中。
您建议用于Rails应用程序的哪些消息队列?
编辑:感谢您的建议,我将在本周末查看其中的一些建议。
再次编辑:我四处看了看,有点不知所措。但是,我将使用RabbitMQ与Workling集成到我正在构建的应用程序中,然后如果我需要了解快速队列的知识,我将拥有此知识并知道它是否符合我的需求。
编辑:越来越发现DJ对我来说完全没问题,如果我在网站上“超出”它,我会说Resque是我要前往的地方。
编辑:(2014年12月)自我询问以来已经过了很长时间,但我看到它仍然得到一些浏览或投票,因此我想在选择后台工作者时更新我的方法。
在我看来,当前在Ruby中运行后台作业的最佳方式是使用Sidekiq。许多人真正赞扬Sidekiq的线程工作者而不是每个工作者进程,这可以比Resque等使用显着更少的内存。这很好,但对我来说这不是关键特点。通过使用Sidetiq与Sidekiq,作业调度非常简单,我切换过来并从未回头,这是我使用过的最简单的作业调度,并且使Sidekiq易于使用。
7个回答

16
作为最新消息--GitHub已经从Delayed job转移到了基于Redis的Resque。然而对于规模较小的设置,他们仍然建议使用Delayed job。

https://github.com/resque/resque


9
Chris Wanstrath来自github,最近在旧金山Ruby聚会上谈论了他们的队列。他们尝试了Starling、beanstalk和其他一些变种,最终选择了Shopify的delayed_job。他们在使用后台处理方面非常积极。
这是去年一篇博客文章,讲述了他们转向DJ的情况。
我现在所在的地方几年前我们自己开发了一个,但我正在借鉴DJ的一些想法来改进处理方式。

我现在已经转向使用延迟作业了,对于我所做的事情来说似乎是最好的选择,易于设置和使用。强烈推荐。 - nitecoder
2
从那时起,他们已经转移到了Resque(http://github.com/blog/542-introducing-resque)。Chris仍然对delayed job有很多好话,但是Resque更好地满足了他们的需求。对我来说,delayed job仍然更好。 - Kyle Heironimus

9
我建议如果您不需要处理大量数据,可以使用delayed-job作为简单易用的解决方案。优点:易于设置,易于监控,代码简单,没有外部依赖。我们之前使用了ActiveMessaging(带有ActiveMQ和stomp),但对于我们的项目来说过于复杂了,所以我们转而使用了delayed_job来简化操作。
无论如何,如果您需要成熟且快速的解决方案,ActiveMQ是一个非常好的选择。如果您不想花太多时间维护完整的消息队列解决方案,您真的不需要,那么delayed_job是一种方法。这里有一篇关于Scribd在ActiveMQ上的经验的好文章

我喜欢delayed_job!非常简单易用! - BinaryButterfly

4

3

2
Rany Keddo在去年的RailsConf Europe上做了一个关于Starling + Workling的有用演示。他比较了当时可用的不同解决方案。
Twitter最新放弃Starling + Workling可能对普通的Rails应用程序意义不大。他们有更多规模问题,可能存在数据存储遗留问题,阻止他们超越当前的实现进行扩展。
Beanstalkd是一个好的替代方案,因为它作为守护进程运行,并且在其他脚本语言中有包装器(如果你将来改变方向或使用其他语言编写不同的组件)。
这个链接也有一个关于各种Rails解决方案的优缺点的良好比较。

1

我使用 background_job,它类似于 delayed_job,是一个基于数据库的队列。

只要你不在进出太多流量,数据库就可以成为一个不错的队列。

我喜欢 background_job(和 delayed_job)的原因是它们不需要单独的进程。它们可以通过 cron 运行。对我来说,这非常重要,因为我的消息需求甚至比我微薄的系统管理员技能还要简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接