当前位置: 首页 > 工具软件 > Sidekiq > 使用案例 >

sidekiq 取消执行中的任务,ActiveJob 解决重试问题

萧晔
2023-12-01

ruby on rails 使用gem sidekiq,执行中的任务 在sidekiq的任务中很难取消,解决此方法由以下方法:

暴力方法:

# 此方法会重新设置redis的key,将会会进入到失败队列
# “cancelled-”是你的sidekiq中redis的命令空间 例如 sidekiq:status:  => 例如 Sidekiq.redis {|c| c.set("sidekiq:status:#{jid}", "123456") }
Sidekiq.redis {|c| c.set("cancelled-#{jid}", "自定义key") }

理性方法:将方法最好定义在MyWorker下

def cancel! job_id
  # 过期时间
  cancel_second = 1
  # 立即执行 设置过期时间 终止执行 将进入重试
  Sidekiq.redis {|c| c.setex("sidekiq:status:#{job_id}", cancel_second, 1) }
end

此方法会将执行中的sidekiq放入重试中。
1.如果是worker任务的话,你只需要 在worker添加配置

sidekiq_options retry: 1

2.如果是 ActiveJob引用sidekiq的话,你需要在执行的时候放入以下部分

ApplicationJob.set(retry: false).perform_later

set(retry: boolean) true 是重试,false不重试

 类似资料: