Sidekiq在使用延迟扩展设置后立即找到作业

时间:2018-05-04 16:37:06

标签: ruby-on-rails-4 sidekiq

我正在安排Sidekiq的工作,并希望在我安排后立即检查队列大小:

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

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

我的真实案例有点复杂。我安排一个工作,然后渲染一个页面,在那个页面上,我检查某些类型的工作是否已安排或正在运行,但所有这些似乎都发生在快速检查失败(如果我立即重新加载页面,那么检查成功)。

我猜测在呼叫延迟与实际结束任何队列之间的作业之间存在微小的延迟。有没有办法解决这个问题,即检查所有这些工作(还没有登陆队列)。

1 个答案:

答案 0 :(得分:0)

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

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

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