sidekiq取消列表到预定的工作

我有几个预定的工作运行如下:

MyWorker.perform_at(3.hours.from_now, 'mike', 1) 

我想知道,如果以后再说一小时后,我觉得我想要取消这份工作,我该怎么办呢?

我最近编写了一些代码来处理这个问题,它可以在我的sidekiq-status gem的分支中找到。 你可以在这里查看或使用它: https : //github.com/Robinson7D/sidekiq-status

(你必须使用它作为git: gemfile中的信息,当前,直到项目的主叉实现这一点)

要使用它,首先要存储job_identifier:

 job_identifier = MyWorker.perform_at(3.hours.from_now, 'mike', 1) 

当你想要销毁它时,你可以调用Sidekiq :: Status.cancel方法:

 Sidekiq::Status.cancel job_identifier 

编辑:自写这篇文章以来,我的代码被接受到Sidekiq :: Status的主叉 – https://github.com/utgarda/sidekiq-status 。 你不再需要使用我的前叉了。 在Utgarda的分叉上你会通过调用unchedule来触发它,而不是取消:

 Sidekiq::Status.unschedule job_identifier 

此外:您还可以使用标准的Sidekiq gem删除作业,如下所述: https : //github.com/mperham/sidekiq/wiki/API (尽管对于他们的方法,您需要安排作业的unix-timestamp -你不能只用作业的id删除;如果你想删除没有时间戳的作业,Sidekiq :: Status方法可能适合你)。

但是,如果你只想删除一个作业Sidekiq::ScheduledSet.new().delete(unix_timestamp, jid)我会推荐一些类似于Sidekiq::ScheduledSet.new().delete(unix_timestamp, jid)

据我所知,Sidekiq目前无法取消日程安排工作。 我写了一个服务,让我可以取消我的预定邮件。 但是使用redis命令可以相当轻松地取消作业:

你得到这样的日程安排工作:

 schedules_jobs = $redis.zrange "schedule", 0, -1, {withscores: true} 

然后你得到一系列工作,然后你选择一份工作并取消它,如下所示:

 $redis.zrem "schedule", schedules_jobs[0]