在Rails Observer中使用线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Rails Observer中使用线程相关的知识,希望对你有一定的参考价值。
据我所知,Ruby on Rails中的Observer模式不是异步的,这意味着Observer的执行将阻止正在处理的动作。
我知道delayed_job gem我真的很喜欢它,但有时它看起来有点太重了某些用途。
如何在Observer的回调中启动一个新线程呢?
我花了一些时间试图找到这种方法的优点和缺点,但失败了。
所以问题是:Observer的线程有任何严重的缺点吗?
你听说过sidekiq吗?这是进行后台处理的新“热门”宝石(vs resque或delayedjob)。
来自FAQ:
sidekiq使用redis进行存储并在多线程进程中处理消息。设置resque同样容易,但在原始处理速度方面更有效。您的工作人员代码确实需要是线程安全的。
还有关于它的轨道广播here。
与创建自己的线程相比,我建议使用它。
DelayedJob和Sidekiq都提供了很好的选择,Rails现在提供完整的ActiveJob支持,这里是官方文档 - https://guides.rubyonrails.org/v4.2/active_job_basics.html
DelayedJob我认为已经是最长的,由建立Shopify.com的工作人员创建。它会在您的rails应用程序中创建一个表,并排队等候。对我来说,它提供了最简单的选项,因为它不包含除rails应用程序之外的其他依赖项。
Sidekiq也是一个很好的选择。它也非常简单且维护良好,但它不使用您的数据库,而是使用redis服务器来管理作业。这使得开发变得有点棘手,因为您必须安装redis并记得在运行应用程序时启动它。不难,只是一些额外的东西。
这是一个快速指南比较两个 - DelayedJob vs. Sidekiq,希望有所帮助。
以上是关于在Rails Observer中使用线程的主要内容,如果未能解决你的问题,请参考以下文章