how to delete a job in sidekiq

前端 未结 8 1995
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-07 20:32

I am using sidekiq in my rails app. Users of my app create reports that start a sidekiq job. However, sometimes users want to be able to cancel \"processing\" reports. Delet

8条回答
  •  攒了一身酷
    2020-12-07 21:15

    I had the same problem. I solved it by registering the job id when I initialize it and by creating another function cancel! to delete it.

    Here is the code:

    after_enqueue do |job|
      sidekiq_job = nil
    
      queue = Sidekiq::Queue.new
      sidekiq_job = queue.detect do |j|
        j.item['args'][0]['job_id'] == job.job_id
      end
    
      if sidekiq_job.nil?
        scheduled = Sidekiq::ScheduledSet.new
        sidekiq_job = scheduled.detect do |j|
          j.item['args'][0]['job_id'] == job.job_id
        end
      end
    
      if sidekiq_job.present?
        booking = job.arguments.first
        booking.close_comments_jid = sidekiq_job.jid
        booking.save
      end
    end
    
    
    def perform(booking)
       # do something
    end
    
    def self.cancel!(booking)
      queue = Sidekiq::Queue.new
      sidekiq_job = queue.find_job(booking.close_comments_jid)
    
      if sidekiq_job.nil?
        scheduled = Sidekiq::ScheduledSet.new
        sidekiq_job = scheduled.find_job(booking.close_comments_jid)
      end
    
      if sidekiq_job.nil?
        # Report bug in my Bug Tracking tool
      else
        sidekiq_job.delete
    
      end
    end
    

提交回复
热议问题