目前,我有一个像这样的sidekiq工作:
class SyncUser
include Sidekiq::Worker
def perform(user_id)
#do stuff
end
end
Run Code Online (Sandbox Code Playgroud)
我正在这样的队列中找到一份工作:
SyncUser.perform_async user.id
Run Code Online (Sandbox Code Playgroud)
当然这一切都有效但调用perform_async和实际执行的作业之间存在一点滞后.
还有什么我可以告诉sidekiq立即执行这项工作吗?
Win*_*eld 90
这里有两个问题.
如果要立即执行作业,可以在当前上下文中使用:
SyncUser.new.perform(user.id)
Run Code Online (Sandbox Code Playgroud)
如果要减少正在计划的异步工作与在sidekiq worker中执行的异步工作之间的延迟,可以减小poll_interval
设置:
Sidekiq.configure_server do |config|
config.poll_interval = 2
end
Run Code Online (Sandbox Code Playgroud)
该poll_interval
是工人如何频繁地检查队列作业工人后端内的延迟.正在安排和与自由工作人员一起执行的工作之间的平均时间poll_interval / 2
.
使用.perform_inline
SyncUser.perform_inline(user.id)
Run Code Online (Sandbox Code Playgroud)
甚至在你的生产控制台中:
SyncUser.perform_inline(user.id)
Run Code Online (Sandbox Code Playgroud)