我正在网上阅读一些教程,这些教程告诉我们在Sidekiq中使用ActiveJob。但我不知道我们为什么要这么做。我看到Sidekiq拥有ActiveJob所拥有的所有特性。
此外,关于Sidekiq文档:这里
警告:通过ActiveJob重试作业,会丢失大量的Sidekiq功能:
这是一个信号,让我觉得我们不应该在ActiveJob中使用Sidekiq。我对ActiveJob的理解错了吗?在使用ActiveJobs时有什么优势吗?
谢谢
发布于 2017-07-25 13:58:15
来自rails ActiveJob 指南
主要目的是确保所有的Rails应用程序都有一个工作基础设施。然后,我们可以在此基础上构建框架特性和其他宝石,而不必担心各种作业运行程序(如延迟作业和Resque )之间的API差异。那么,选择排队后端就成了一个操作上的问题。你可以在它们之间切换而不用重写你的工作。
基本上,ActiveJob所做的就是标准化作业队列的API接口。这将帮助你轻松地从一个工作后端转换到另一个工作后端。
当您在ActiveJob中使用Sidekiq时,您可以从所提供的好处中获益,但真正的收获是,当您发现另一个队列对您的应用程序最好时,ActiveJob允许您使用一个班轮切换到您选择的作业排队器。
# application.rb
config.active_job.queue_adapter = :sidekiq发布于 2018-10-17 21:57:34
对我来说,ActiveJob的主要特性是支持GlobalId。比较:
Sidekiq
class SomeJob
include Sidekiq::Worker
def perform(record_id)
record = Record.find(record_id)
record.do_something
end
end
SomeJob.perform_async(record.id)ActiveJob
class SomeJob < ApplicationJob
def perform(record)
record.do_something
end
end
SomeJob.perform_later(record)又方便又干净!
关于重试--是的,这是个问题,我不知道为什么在ActiveJob中忽略了给底层系统配置每个作业自己的params的功能。就解决办法而言,使用gem 主动工作-重试是可能的
class SomeJob
include ActiveJob::Retry.new(strategy: :exponential, limit: 0)
end这将禁用ActiveJob的重试,而Sidekiq的重试仍然有效。可以通过Sidekiq.default_worker_options['retry'] = 2在配置文件中配置sidekiq的重试
更新
重试问题在Sidekiq 6.0中是固定的
发布于 2020-12-18 17:14:58
活动作业是排队技术之上的抽象层。
理论上,它允许您编程到公共接口,而不管您在下面使用什么。
听起来不错吧?嗯,在实践中,直接使用Sidekiq会更好。
https://stackoverflow.com/questions/45305175
复制相似问题