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

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不重试

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值