39

人们在他们的 Rails 应用程序中使用了哪些消息队列,以及决定选择它的驱动力是什么。最新的 Twitter 对其内部队列 Starling 倒下的宣传是否会影响任何现有的设计决策。

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

你会为 Rails 应用推荐什么消息队列???

编辑:感谢您的建议,这个周末我将看看其中的一些。

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

编辑:找到越来越适合我的 DJ,如果我在某个网站上“长大”,我会说 Resque 是我要去的地方。

编辑:(2014 年 12 月)所以自从我问这个问题已经有很长时间了,但我看到它仍然得到一些意见或投票,所以我想我现在在选择背景工作人员时会更新我的方法.

在我看来,目前在 Ruby 中运行后台作业的最佳方式是使用 Sidekiq。很多人真的称赞 Sidekiq 是线程化的工作线程,而不是每个工作线程的进程,它使用的内存比我在 Sidekiq 之前使用的 Resque 之类的内存要少得多。这很好,但对我来说这不是杀手级功能。通过将 Sidetiq 与 Sidekiq 一起使用,作业调度变得如此简单,以至于我切换并且从未回头看它,这是迄今为止我使用过的最简单的作业调度,并使 Sidekiq 使用起来轻而易举。

4

7 回答 7

16

作为更新——GitHub 已移至 Redis 上的 Resque,而不是延迟作业。但是,他们仍然建议对于较小的设置使用延迟作业:

https://github.com/resque/resque

于 2009-11-29T15:56:07.237 回答
9

来自 github 的 Chris Wanstrath 最近在 SF Ruby 聚会上,谈论他们的队列。他们尝试了 Starling、beantalk 和其他一些变体,然后才选择了 Shopify 的 delay_job。他们对背景的使用非常激进。

这是去年的一篇博客文章,讲述了他们转向 DJ 的故事。

我现在在哪里我们几年前推出了自己的产品,但我正在从 DJ 那里获得一些想法来改进处理。

于 2009-04-06T17:39:13.000 回答
9

如果您不期望任何繁重的负载,我会推荐延迟作业作为一个简单的解决方案。优点:易于设置、易于监控、代码简单、没有任何外部依赖项。以前我们使用 ActiveMessaging(带有 ActiveMQ 和 stomp),但它对我们的项目来说有点过头了,所以为了简单起见,我们改用了 delay_job。

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

于 2009-04-16T13:23:14.107 回答
4

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

http://xph.us/software/beanstalkd

http://rubyforge.org/forum/forum.php?forum_id=19781

http://backgroundrb.rubyforge.org

而且,来自 Amazon 的托管解决方案将为 Ruby/Rails 和更大系统的其他组件之间的共享提供一个很好的队列:

http://aws.amazon.com/sqs

希望这可以帮助!

于 2009-04-06T15:22:07.587 回答
3

您可能想要使用的 Messaging Server 是 RabbitMQ。Erlang 很酷,AMQP,优秀的 Ruby 库。

http://www.bestechvideos.com/2008/12/09/rabbitmq-an-open-source-messaging-broker-that-just-works

于 2009-04-16T13:31:09.063 回答
2

Rany Keddo 去年在 RailsConf Europe 上做了一个关于 Starling + Workling的有用演示。他比较了当时可用的不同解决方案。

Twitter 离开 Starling + Workling 的最新举措可能对常规的 Rails 应用程序意义不大。他们有更多的规模问题,并且他们的数据存储可能存在遗留问题,这些问题阻止他们超越当前的实施。

Beanstalkd是一个不错的选择,仅仅是因为它作为守护进程运行并且具有其他脚本语言的包装器(如果您将来碰巧改变方向或有用其他语言编写的不同组件)。

链接还对可用的各种导轨解决方案的优缺点进行了很好的比较。

于 2009-04-06T18:49:36.873 回答
1

我使用background_job,它就像delay_job是一个基于数据库的队列。

只要您进出的流量不太多,数据库就会生​​成一个 OK 队列。

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

于 2009-04-06T22:52:03.623 回答