Ruby on Rails中的消息队列
人们使用哪些消息队列来处理他们的Rails应用程序,决定select它的原因是什么? Twitter上的最新宣传是否会影响任何现有的devise决策?
我正在研究一个应用程序,它需要一个消息队列来处理一些后台任务,我没有做太多的工作,而且我以前见过的大部分东西都是关于Starling和Workling的,说实话,应用程序不是很大,这个解决scheme可能就足够了,但我很乐意获得整合最佳解决scheme的经验,因为我相信我会在某个时候将其整合到一个更大的应用程序中。
什么消息队列,你会build议一个Rails应用程序?
编辑:谢谢你的build议,我将在本周末看看他们中的几个。
再次编辑:我有一个环顾四周,有点不知所措的select。 然而,我将会把RabbitMQ与Workling整合到我正在构build的应用程序中,然后如果我需要关于快速队列的一些知识,那么我会知道它是否符合我的需求。
编辑:寻找越来越多的DJ适合我就好了,如果我曾经“超出”它在一个网站上我会说Resque是我会头的地方。
编辑:(十二月2014)所以这是很长的时间,因为我问这个,但我看到它仍然得到一些意见或一些投票,所以我想我会更新我的方法现在当涉及到我select的背景工作。
在我看来,目前在Ruby中运行后台作业的最好方法是使用Sidekiq。 很多人真的称赞Sidekiq是因为它是线程化的工作者,而不是每个工作者的进程,比使用Sidekiq之前使用的Resque更less的内存。 这是好事,但对我来说,这不是杀手的function。 通过与Sidekiq一起使用Sidetiq,调度工作是如此的微不足道,以至于我转而从未回过头来看,这是迄今为止我所使用的最简单的工作计划,使得Sidekiq可以轻松使用。
作为一个更新 – GitHub已经转移到Redis的Resque而不是延迟的工作。 不过,他们仍然build议为较小的设置delayed_job:
来自github的Chris Wanstrath最近在SFruby聚会上谈论了他们的队列。 在决定使用Shopify的delayed_job之前,他们尝试了Starling,beanstalk和其他一些变体。 他们使用背景非常积极。
这是去年的博客文章 ,谈到他们转向DJ。
我现在在哪里,我们几年前推出了自己的产品,但我正在从DJ的一些想法来改进处理。
如果您不希望有任何沉重的负担,我会build议延迟工作作为一个简单的解决scheme。 优点:易于安装,易于监控,简单的代码,不具有任何外部依赖性。 以前我们使用ActiveMessaging(与ActiveMQ和跺脚),但它是我们的项目矫枉过正,所以我们切换到delayed_job简单。
无论如何,如果你需要非常成熟和快速的解决scheme, ActiveMQ是一个非常好的select。 如果您不想花费太多时间来维护全面的消息队列解决scheme,那么您并不需要,delayed_job是一种可行的方法。 这里有一篇关于Scribd ActiveMQ体验的好文章 。
以下是一些Ruby / Rails解决scheme,根据您的需求,这些解决scheme中的一个或多个可能很适合:
http://xph.us/software/beanstalkd
http://rubyforge.org/forum/forum.php?forum_id=19781
http://backgroundrb.rubyforge.org
而且,来自亚马逊的托pipe解决scheme将成为Ruby / Rails和大型系统其他组件之间共享的良好队列:
希望这可以帮助!
您可能想要使用的Messaging Server是RabbitMQ。 Erlang酷,AMQP,好的Ruby库。
http://www.bestechvideos.com/2008/12/09/rabbitmq-an-open-source-messaging-broker-that-just-works
Rany Keddo去年在RailsConf Europe上做了关于Starling + Workling的有用介绍 。 他比较了当时可用的不同解决scheme。
Twitter从Starling + Workling的最新举措对普通的Rails应用程序来说可能并不重要。 他们有更多的规模问题,可能在数据存储方面存在遗留问题,导致他们无法扩展到当前的实施。
Beanstalkd是一个很好的select,只是因为它作为一个守护进程运行,并且在其他脚本语言(如果你将来改变方向或者用其他语言编写不同的组件)包装。
这个链接还可以很好地比较各种铁路解决scheme的利弊。
我使用了类似于delayed_job的 background_job是一个基于数据库的队列。
只要你没有做太多的进出stream量,一个数据库就会生成一个OK队列。
我喜欢background_job(和delayed_job)的原因是他们不需要单独的过程。 他们可以通过cron运行。 对我来说,这是至关重要的,因为我的消息传递需求比我微不足道的系统pipe理员技能还要简单。