Ruby on rails RubyonRails中的消息队列

Ruby on rails RubyonRails中的消息队列,ruby-on-rails,ruby,message-queue,background-process,Ruby On Rails,Ruby,Message Queue,Background Process,人们在Rails应用程序中使用的消息队列是什么?选择它的背后的驱动力是什么。最近推特上关于室内排队的椋鸟坠落的宣传是否影响了现有的设计决策 我正在开发一个应用程序,它需要一个消息队列来处理一些后台任务,我没有做太多,我在过去看到的大部分内容都是关于Starling和Workling的,老实说,应用程序不是很大,这个解决方案可能就够了,但我很想获得整合最佳解决方案的经验,因为我相信我会在某个时候将其整合到更大的应用程序中 对于Rails应用程序,您建议使用哪些消息队列 编辑:谢谢你的建议,这个周末

人们在Rails应用程序中使用的消息队列是什么?选择它的背后的驱动力是什么。最近推特上关于室内排队的椋鸟坠落的宣传是否影响了现有的设计决策

我正在开发一个应用程序,它需要一个消息队列来处理一些后台任务,我没有做太多,我在过去看到的大部分内容都是关于Starling和Workling的,老实说,应用程序不是很大,这个解决方案可能就够了,但我很想获得整合最佳解决方案的经验,因为我相信我会在某个时候将其整合到更大的应用程序中

对于Rails应用程序,您建议使用哪些消息队列

编辑:谢谢你的建议,这个周末我会看一些

再次编辑:我环顾四周,有点不知所措。然而,我将着手将RabbitMQ与工作集成到我正在构建的应用程序中,然后如果我需要一些关于快速队列的知识,那么我将拥有这些知识,并知道它是否适合我的需要

编辑:发现越来越多的DJ适合我就好了,如果我在一个网站上“长大”了,我会说Resque是我的目标

编辑:(2014年12月)我问这个问题已经很久了,但我看到它仍然得到一些意见或投票,所以我想我现在应该更新我的方法,当我选择背景工作者时


在我看来,目前在Ruby中运行后台作业的最佳方法是使用Sidekiq。很多人都称赞Sidekiq是线程化的工作线程,而不是每个工作线程的进程,因为它比我在Sidekiq之前使用的Resque之类的工具占用的内存要少得多。这很好,但对我来说,这不是杀手级功能。通过将Sidetiq与Sidekiq结合使用,作业的调度非常简单,以至于我切换到它,并且从未回头看过它,这是迄今为止我使用过的最简单的作业调度,并且使Sidekiq成为了一种轻松使用的工具。

以下是一些Ruby/Rails解决方案,其中一个或多个可能非常适合您的需要:

还有一个来自Amazon的托管解决方案,它将成为Ruby/Rails和更大系统的其他组件之间共享的绝佳队列:


希望这有帮助

来自github的Chris Wanstrath最近在SF Ruby会议上谈论他们的排队问题。他们尝试了椋鸟、豆茎和其他一些变种,然后决定接受Shopify的延迟工作。他们在使用背景时非常有攻击性

下面是一个关于他们转投DJ的报道

我现在的位置是几年前我们推出了自己的,但我从DJ那里获得了一些想法,以改进操控性。

去年Rany Keddo在RailsConf Europe发表了一篇关于Starling+工作的演讲。他比较了当时可用的不同解决方案

推特最新推出的Starling+工作模式对常规rails应用来说可能意义不大。他们有更多的可扩展性问题,并且他们的数据存储可能存在遗留问题,这使得他们无法扩展到当前的实现

是一个很好的替代方案,因为它作为守护进程运行,并且在其他脚本语言中有包装器(如果您将来碰巧更改了方向,或者使用其他语言编写了不同的组件)

这也很好地比较了各种rails解决方案的优缺点。

我使用的是基于数据库的队列

只要您没有进行太多的进出流量,数据库就会生成一个OK队列

我喜欢后台工作(和延迟工作)的原因是它们不需要单独的流程。它们可以通过cron运行。对我来说,这是非常重要的,因为我的消息传递需求比我微薄的系统管理技能还要简单。

如果您不期望任何繁重的负载,我建议您使用非常简单的解决方案。优点:易于设置,易于监控,代码简单,没有任何外部依赖性。以前我们使用ActiveMessaging(与ActiveMQ和stomp一起使用),但这对我们的项目来说是一种过度的杀伤力,因此为了简单起见,我们切换到延迟的_作业


无论如何,如果你需要非常成熟和快速的解决方案,是一个非常好的选择。若您不想花费太多时间来维护您并不真正需要的全面消息队列解决方案,那个么延迟的任务是一个不错的选择。下面是关于Scribd使用ActiveMQ的体验。

您可能希望使用的消息服务器是RabbitMQ。Erlang凉爽,AMQP,良好的Ruby库

作为更新——GitHub已经转移到Redis上重新创建,而不是延迟作业。但是,对于较小的设置,他们仍然建议延迟作业:


我喜欢这份工作!非常简单易用!我现在已经转移到延迟工作,它似乎是我所做的最好的,易于设置和使用。建议。从那时起,他们已转移到Resque()。克里斯仍然有很多关于延迟工作的好话要说,但Resque更好地满足了他们的需求。对我来说,推迟工作更好。