首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sidekiq与Sidekiq单独使用ActiveJob的优势比较

Sidekiq与Sidekiq单独使用ActiveJob的优势比较
EN

Stack Overflow用户
提问于 2017-07-25 13:42:41
回答 3查看 2.7K关注 0票数 7

我正在网上阅读一些教程,这些教程告诉我们在Sidekiq中使用ActiveJob。但我不知道我们为什么要这么做。我看到Sidekiq拥有ActiveJob所拥有的所有特性。

此外,关于Sidekiq文档:这里

警告:通过ActiveJob重试作业,会丢失大量的Sidekiq功能:

  1. Web可见性( Retries选项卡将为空)
  2. 您不能使用Sidekiq::RetrySet API遍历重试。
  3. Sidekiq的日志将不包含任何故障或回溯。
  4. 错误不会报告给Sidekiq的全局错误处理程序
  5. 许多高级的Sidekiq特性(例如批处理)不会与AJ重试一起工作。

这是一个信号,让我觉得我们不应该在ActiveJob中使用Sidekiq。我对ActiveJob的理解错了吗?在使用ActiveJobs时有什么优势吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-25 13:58:15

来自rails ActiveJob 指南

主要目的是确保所有的Rails应用程序都有一个工作基础设施。然后,我们可以在此基础上构建框架特性和其他宝石,而不必担心各种作业运行程序(如延迟作业和Resque )之间的API差异。那么,选择排队后端就成了一个操作上的问题。你可以在它们之间切换而不用重写你的工作。

基本上,ActiveJob所做的就是标准化作业队列的API接口。这将帮助你轻松地从一个工作后端转换到另一个工作后端。

当您在ActiveJob中使用Sidekiq时,您可以从所提供的好处中获益,但真正的收获是,当您发现另一个队列对您的应用程序最好时,ActiveJob允许您使用一个班轮切换到您选择的作业排队器。

代码语言:javascript
复制
# application.rb
config.active_job.queue_adapter = :sidekiq
票数 7
EN

Stack Overflow用户

发布于 2018-10-17 21:57:34

对我来说,ActiveJob的主要特性是支持GlobalId。比较:

Sidekiq

代码语言:javascript
复制
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

代码语言:javascript
复制
class SomeJob < ApplicationJob
  def perform(record)
    record.do_something
  end
end

SomeJob.perform_later(record)

又方便又干净!

关于重试--是的,这是个问题,我不知道为什么在ActiveJob中忽略了给底层系统配置每个作业自己的params的功能。就解决办法而言,使用gem 主动工作-重试是可能的

代码语言:javascript
复制
class SomeJob
  include ActiveJob::Retry.new(strategy: :exponential, limit: 0)
end

这将禁用ActiveJob的重试,而Sidekiq的重试仍然有效。可以通过Sidekiq.default_worker_options['retry'] = 2在配置文件中配置sidekiq的重试

更新

重试问题在Sidekiq 6.0中是固定的

票数 7
EN

Stack Overflow用户

发布于 2020-12-18 17:14:58

活动作业是排队技术之上的抽象层。

理论上,它允许您编程到公共接口,而不管您在下面使用什么。

听起来不错吧?嗯,在实践中,直接使用Sidekiq会更好。

  • 大多数Ruby/Rails商店都在Sidekiq上。您永远不会用Sidekiq来交换其他的队列技术,而且在不太可能的情况下,Active Job不会像您想象的那样为您节省大量的工作。
  • Sidekiq和活动工作不能很好地合作。更糟的是,在旧版本。除非您在Rails、6.0.2+和Sidekiq6.0.4上,否则Sidekiq重试不会对活动作业开箱即用。如果您在5.1之前的Rails版本上,除非您使用Sidekiq中间件或添加另一个您并不真正需要的第三方依赖项,否则通过Active Job重试根本无法工作。
  • 活动作业增加了大量开销,这只是在基准测试中捕获的性能开销。更重要的是,除了了解Sidekiq的工作原理之外,还需要了解活动作业是如何工作的。更多层是更复杂的,即使它看起来不像它。
  • 因为活动作业有自己的重试机制,所以在重试和错误时会失去可见度。在Sidekiq中,只有在激活的作业重试用尽后,才能在Sidekiq中看到它们,并使Sidekiq异常出现。
  • Lev提到的GlobalId特性?这种魔法导致了更多的侦探工作。更喜欢显式代码,而不是隐藏行为来保存一行代码,并错误地理解代码实际上在做什么。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45305175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档