Sidekiq删除或杀死中间件内的作业

时间:2016-09-29 22:07:33

标签: sidekiq

是否建议删除或终止中间件中失败的作业?我无法在维基中找到关于此事的任何文档。 FWIW,我正在使用sidekiq-pro。

我注意到的一件事是,即使我有正确的工作ID,工作也没有被杀死。是否可以在sidekiq作业入队时为其分配不同的ID?

STATUSES = {
  canceled:        6,
  failure:         9,
  expired:         10
}.freeze

def call(worker, message, queue)
  key = message['args'][0]
  jid = message['jid']

  if key.present?
    // status_id fetched from database
    status_id = Req.find(key).status

    if STATUSES.values.include?(status_id)
      if killable?(message)
        job = Sidekiq::RetrySet.new.find_job(jid)
        // kill doesn't always succeed because job cannot be found
        job.kill
      end
    end
  end
  yield
end

def killable?(message)
  message.key?('retry_count')
end

1 个答案:

答案 0 :(得分:2)

无需“杀死”这份工作,只需返回而不是屈服。这项工作无需执行任何操作即可成功。您可以使用此方法作为将作业发送到死队列的参考:

https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/middleware/server/retry_jobs.rb#L151