【问题标题】:Sidekiq where is the job located right after being set using delay extensionSidekiq 使用延迟扩展设置后的工作在哪里
【发布时间】:2018-05-04 16:37:05
【问题描述】:

我正在使用 Sidekiq 安排一个作业,并想在我安排它后立即检查队列大小:

MyClass.delay.my_method
Sidekiq::ScheduledSet.new.size # => 0
Sidekiq::Queue.new.size # => 0

我很惊讶队列是空的,尽管我在监控 UI 中看到该作业尚未执行(实际上它稍后会执行)。

我的真实情况要复杂一些。我安排了一个作业,然后呈现一个页面,在该页面上,我检查了某种类型的作业是否已安排或正在运行,但这一切似乎都发生得很快,我的检查失败了(如果我立即重新加载页面,那么检查成功)。

我猜在调用延迟和实际结束任何队列的作业之间存在微小的延迟。有没有办法解决这个问题,即检查所有此类工作(尚未进入队列)。

【问题讨论】:

    标签: ruby-on-rails-4 sidekiq


    【解决方案1】:

    延迟只是意味着“在 Sidekiq 中运行此方法”。就像调用 perform_async 一样,作业会立即入队。

    ScheduledSet 用于delay_for(1.hour, ...),就像perform_in(1.hour, ...),您正在创建一个作业并且不希望它在一段时间内排队。

    您会看到一个空队列,因为 Sidekiq 会在几微秒内获取作业并执行它。正在运行的作业不再排队。

    【讨论】:

    • 好的,所以一个正在运行的作业不再排队,那么它应该在Sidekiq::Workers.new 上可用,对吧?但是,该大小也是 0,而该作业实际上需要 2 秒才能完成。我确实(通过记录时间戳)确认,在我调用Sidekiq::Workers.new.size 时,工作确实开始了(并且经过了大约 200 毫秒)。
    • Worker 数据每 5 秒更新一次 github.com/mperham/sidekiq/wiki/API#workers 如果它在 2 秒内开始和结束,它甚至可能从未进入过 Worker 数据。
    • 所以,换句话说,没有解决方案。工作刚开始,我就找不到工作了吗? :(
    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 2017-01-27
    • 2017-07-27
    • 2016-12-12
    • 1970-01-01
    • 2016-03-02
    • 2022-10-08
    • 1970-01-01
    相关资源
    最近更新 更多