在Rails应用程序中运行异步作业的最佳方法是什么?

时间:2020-03-06 14:37:59  来源:igfitidea点击:

我知道有几个插件可以进行异步处理。哪一个是最好的,为什么?

我知道的是:

  • 背景

解决方案

BackgrounDRb优点:全功能,消息传递,缺点:线程化(eek Rails线程不安全!),复杂

守护进程生成器优点:简单,可以运行工作,仅此而已!,缺点:那些花哨的消息都没有。

如果我们可能有几个这样的过程,并且希望将它们排成队列,则starling和workling似乎非常有趣(请参阅截屏视频)。

我们可能还对以前使用rake进行后台处理的截屏视频以及将来可能对同一问题的另一种解决方案感兴趣的屏幕广播感兴趣。

某事是否是"最佳"解决方案,实际上取决于我们要解决的问题。在某些情况下,最好的解决方案是最轻巧的解决方案,而其他重量级的解决方案则是最好的解决方案。

BackgroundRb可能是功能最全的Rails后台作业处理器,但它也是最复杂的,因此需要更多的投资才能掌握。 BackgroundRb可能可以处理从简单到复杂的大多数用例。

我听说过有关Ara T. Howard的后台作业(Bj)的很好的事情,引述README的内容是,Rails的脑筋急转弯简单的零管理员后台优先级队列。这是一个轻量级的解决方案,因此对于大多数情况而言,它可能比BackgroundRb更可取。

如果我们想要的是不经常脱机进行批处理样式的解决方案,那么所有Rails应用程序附带的script / runner绰绰有余。

要进一步阅读,我们可能需要查看Rails Wiki的HowToRunBackgroundJobsInRails。

我们使用Cron。易于设置,易于维护,并且始终有效。

BackgroundRb会吞噬大脑。

Starling + Workling插件非常简单。另外,它使用简单,经过测试和可扩展的Memcached。

BackgrounDRb不是线程化的,它是完全基于进程的。它仅具有用户可以使用的线程池功能,如果他想同时处理IO绑定的任务。

尝试1.1版本,然后让我(在我的博客上)或者邮件列表上知道任何问题。

我将DJ(延迟作业)添加到列表http://blog.leetsoft.com/2008/2/17/delayed-job-dj

github伙计们最近对其进行了出色的评论:http://github.com/blog/197-the-new-queue

Resque也可以为我们提供帮助。

这是一个非常好的工具,可用于创建后台作业,将这些作业放在多个队列中并在以后进行处理。

Github的家伙已经创建并使用它。

以下文章可以入门:

http://rubylearning.com/blog/2010/11/08/do-you-know-resque/