我在网上阅读了一些教程,告诉我们如何使用ActiveJob和Sidekiq。但我不知道为什么我们应该这样做。我看到Sidekiq具有ActiveJob的所有功能。
此外,在Sidekiq文档中:here
警告:通过ActiveJob执行作业重试会丢失大量Sidekiq功能:
- Web UI可见性(“重试”选项卡将为空)
1.您无法使用Sidekiq::RetrySet API重复执行重试。 - Sidekiq的日志将不包含任何失败或回溯。
1.错误不会报告给Sidekiq的全局错误处理程序
1.许多高级Sidekiq功能(例如批处理)将无法与AJ重试一起工作。
这是一个信号,不知何故,让我认为我们不应该使用Sidekiq与ActiveJob。我对ActiveJob的理解是错误的吗?当使用ActiveJob与Sidekiq有什么好处吗?
谢谢
3条答案
按热度按时间bxpogfeg1#
从轨道活动作业guide
主要的一点是确保所有Rails应用程序都有一个合适的作业基础设施。然后我们可以在此基础上构建框架特性和其他gem,而不必担心不同作业运行器之间的API差异,如Delayed Job和Resque。然后,选择队列后端就变成了一个操作问题。您将能够在它们之间切换,而不必重写您的作业。
基本上,ActiveJob所做的就是标准化作业队列的API接口。2这将帮助你轻松地从一个作业后端转换到另一个。
当您将Sidekiq与ActiveJob一起使用时,您可以从Sidekiq提供的好处中获益,但真实的的问题是,当您发现另一个队列最适合您的应用程序时,ActiveJob允许您切换到所选的作业队列,只需一行代码
nxowjjhe2#
对我来说,ActiveJob的主要特性是支持GlobalId。比较:
侧基:
活动作业:
非常方便而且干净!
关于重试-是的,这是个问题,我不知道为什么ActiveJob忽略了底层系统配置每个作业自己的参数的功能。到目前为止,作为一种解决方案,可以使用gem activejob-retry:
这将禁用ActiveJob的重试,而Sidekiq的重试仍然有效。可以通过
Sidekiq.default_worker_options['retry'] = 2
在配置文件中配置Sidekiq的重试更新
Sidekiq 6.0中修复了重试问题
3bygqnnd3#
活动作业是队列技术之上的一个抽象层。
从理论上讲,它允许你编程到一个公共接口,而不管你在下面使用什么。
听起来不错吧?实际上,直接使用Sidekiq会更好。