在Sidekiq worker内部如何获取其被调用时传入的参数?
Sidekiq Worker内部获取执行参数的解决方案
可以直接获取,Sidekiq 为Worker实例提供了内置的arguments实例方法,调用后会返回当前任务执行时传入的原始参数组成的数组,不需要自己额外存储。
你给出的示例代码可以修改为以下形式即可实现需求:
class MyWorker include Sidekiq::Worker include MyRescheduler def perform(a, b, c) do_reschedule end end module MyRescheduler def do_reschedule # 直接调用arguments获取原始参数数组,展开后传入perform_in即可 self.class.perform_in 1.minute, *arguments end end
如果使用的是5.2以下的旧版本Sidekiq,没有内置arguments方法,可以通过回调提前存储参数实现兼容:
module MyRescheduler def self.included(base) base.around_perform :store_arguments end def store_arguments(job, block) @_arguments = job['args'] block.call end def do_reschedule self.class.perform_in 1.minute, *@_arguments end end
内容的提问来源于stack exchange,提问作者Manuel Meurer
相关产品推荐
相关产品推荐

