0

据我所知,Ruby on Rails 中的观察者模式并不是异步的,这意味着观察者的执行将阻止正在处理的动作。

我知道delayed_job gem,我真的很喜欢它,但有时对于某些用途来说它看起来有点太重了。

在 Observer 的回调中启动一个新线程怎么样?

我花了一些时间试图找出这种方法的利弊,但失败了。

那么问题来了:Observer 的线程有什么严重的缺陷吗?

4

2 回答 2

0

你听说过sidekiq吗?这是进行后台处理的新“热门”宝石(相对于 resque 或延迟作业)。

常见问题解答

sidekiq使用redis进行存储,多线程处理消息。它与 resque 一样容易设置,但在原始处理速度方面更有效。您的工作代码确实需要是线程安全的。

这里还有一个关于它的railscast

与创建自己的线程相比,我建议使用它。

于 2012-11-27T21:29:52.810 回答
0

DelayedJob 和 Sidekiq 都提供了不错的选择,Rails 现在提供完整的 ActiveJob 支持,这里是官方文档 - https://guides.rubyonrails.org/v4.2/active_job_basics.html

DelayedJob 我认为是最长的,由构建 Shopify.com 的工作人员创建。它会在您的 Rails 应用程序和队列中创建一个表并以此为基础。对我来说,它提供了最简单的选项,因为它除了你的 rails 应用程序之外没有其他依赖项。

Sidekiq 也提供了一个很好的选择。它也非常简单且维护良好,但它不使用您的数据库,而是使用 redis 服务器来管理作业。这使得开发有点棘手,因为您必须安装 redis 并记住在运行应用程序时启动它。不难,只是有点额外的东西。

这是比较两者的快速指南 - DelayedJob 与 Sidekiq,希望对您有所帮助。

于 2018-09-10T19:31:00.493 回答