Hapus antrian sidekiq


93

Saya memiliki pekerja yang berjalan selamanya.

class Worker
  include Sidekiq::Worker
  sidekiq_options queue: "infinity", retry: true

  def perform(params)
    # ...
    self.class.perform_in(30.seconds, params)
  end
end

Masalahnya adalah saya memuat pekerja saat start up, seperti ini. config/initializers/load_workers.rb

Rails.application.config.after_initialize do  
  if ENV["SIDEKIQ"] == "1"
    Worker.perform_async({})
  end
end

Menggunakan ini untuk memulai sidekiq SIDEKIQ=1 sidekiq --verbose --environment production -C config/sidekiq.yml.

Ini berarti pekerja lama harus berhenti, baik yang sedang berjalan tetapi juga yang dijadwalkan ulang.

Saya mencoba menjalankan ini saat memulai (tepat sebelum memuat karya baru), tetapi tidak berhasil.

q = []
q += Sidekiq::RetrySet.new.select { |job| job.klass.match(/Worker/) }
q += Sidekiq::Queue.new("infinity").select { |job| job.klass.match(/Worker/) }
q += Sidekiq::ScheduledSet.new.select { |job| job.klass.match(/Worker/) }
q.each(&:delete)

Setelah penerapan 5-ish, ada banyak pekerja duplikat dalam antrean yang dijadwalkan untuk nanti. Jadi, apakah ada cara untuk menghapus semua dalam satu antrian dan mencegah pekerjaan yang sudah berjalan dari penjadwalan ulang?

Saya menggunakan sidekiq 3.0.


Apakah Anda ingin menghapus antrian atau pekerjaan yang dijadwalkan. atau lebih baik dikatakan duplikat pekerjaan terjadwal.
Sabyasachi Ghosh

Saya ingin menghapus setiap jejak pekerjaan sebelum saya memuat pekerja baru.
Linus Oleander

ok mengerti masalah Anda .. berarti Anda ingin menghapus semua pekerjaan yang dijadwalkan.
Sabyasachi Ghosh

@haSabyasachiGhosh Tidak, saya ingin menghapus semua yang berhubungan dengan antrian, bukan hanya pekerjaan yang dijadwalkan. Dengan kata lain; gagal, sedang berlangsung, antrian dan pekerjaan yang dijadwalkan harus dihapus.
Linus Oleander

Semua bantuan ada di sini - github.com/mperham/sidekiq/wiki/API
viks

Jawaban:


161

Menghapus semua Pekerjaan dalam Antrean, dengan menghapus antrian.

require 'sidekiq/api' # for the case of rails console

Sidekiq::Queue.new("infinity").clear
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear

Mungkin Sidekiq Pro akan membantu Anda.
Ranjithkumar Ravi

5
Ini untuk menghapus penghitung Sidekiq::Stats.new.resetsaya menemukan bahwa ini membantu

14
Untuk menghapus default / antrian pertama:Sidekiq::Queue.all.first.clear
pengguna456584

1
Sidekiq :: Queue.new ("laporan"). Clear dan Sidekiq :: Queue.new ("alerts"). Clear membantu membersihkan antrian saat ini. Tapi bagaimana dengan Busy? Bagaimana cara menghapus pekerjaan "Sibuk"?
Donato

31
Bersihkan semuanya denganSidekiq::Queue.all.each &:clear
Marco Lazzeri

95

Ini melakukan trik untuk saya:

Sidekiq::Queue.all.each(&:clear)
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
Sidekiq::DeadSet.new.clear

1
Terima kasih ini bekerja seperti pesona saya berada dalam keadaan darurat haha, sahabat karibnya dengan waaaaaay terlalu banyak pekerja dalam antrian ini bekerja seperti yang saya harapkan karena saya mencari killperintah seperti
d1jhoni1b

Sempurna, hanya menambahkan bahwa di env saya, saya harus require 'sidekiq/api'di konsol untuk bekerja.
bonafernando

19

Bekerja untuk saya untuk sebagian besar versi sidekiq:

Sidekiq::RetrySet.new.clear

Sidekiq::ScheduledSet.new.clear

Hapus statistik (Opsional)

Sidekiq::Stats.new.reset

Ini membersihkan seluruh database, bukan hanya antrian.
Linus Oleander

jika akan menghapus semua database sidekiq, dan akan bekerja dengan baik di konsol rel
vidur punj

-2

Anda dapat menghapus antrian Anda dengan menjalankan kode ini meskipun akan ada metode bawaan.

queue = Sidekiq::Queue.new
queue.each do |job|
  job.delete 
end

Nah, ini seharusnya berfungsi saat kita mengambil semua pekerjaan dari antrian dan kemudian menghapusnya satu per satu.
Asad Hameed

Tidak, tidak. Lihatlah jawaban yang ada. Itu juga merupakan duplikat dari jawaban yang sudah ada.
Linus Oleander

Aku tidak tahu apa yang kamu bicarakan. Bisakah Anda menunjukkan jawaban yang sama dengan yang saya posting?
Asad Hameed
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.