Saya terbiasa menggunakan metode delay_jobs untuk masuk ke konsol untuk melihat apa yang ada di antrian, dan kemudahan membersihkan antrian saat diperlukan. Apakah ada perintah serupa di Sidekiq untuk ini? Terima kasih!
Saya terbiasa menggunakan metode delay_jobs untuk masuk ke konsol untuk melihat apa yang ada di antrian, dan kemudahan membersihkan antrian saat diperlukan. Apakah ada perintah serupa di Sidekiq untuk ini? Terima kasih!
Jawaban:
Saya belum pernah menggunakan Sidekiq, jadi mungkin ada metode hanya untuk melihat pekerjaan yang diantrekan, tetapi mereka benar-benar hanya menjadi pembungkus di sekitar perintah Redis, karena pada dasarnya semua Sidekiq (dan Resque) adalah:
# See workers
Sidekiq::Client.registered_workers
# See queues
Sidekiq::Client.registered_queues
# See all jobs for one queue
Sidekiq.redis { |r| r.lrange "queue:app_queue", 0, -1 }
# See all jobs in all queues
Sidekiq::Client.registered_queues.each do |q|
Sidekiq.redis { |r| r.lrange "queue:#{q}", 0, -1 }
end
# Remove a queue and all of its jobs
Sidekiq.redis do |r|
r.srem "queues", "app_queue"
r.del "queue:app_queue"
end
Sayangnya, menghapus pekerjaan tertentu sedikit lebih sulit karena Anda harus menyalin nilai tepatnya:
# Remove a specific job from a queue
Sidekiq.redis { |r| r.lrem "queue:app_queue", -1, "the payload string stored in Redis" }
Anda dapat melakukan semua ini dengan lebih mudah melalui redis-cli
:
$ redis-cli
> select 0 # (or whichever namespace Sidekiq is using)
> keys * # (just to get an idea of what you're working with)
> smembers queues
> lrange queues:app_queue 0 -1
> lrem queues:app_queue -1 "payload"
Sidekiq::Client.registered_queues
telah diganti dengan Sidekiq::Queue.all
dan Sidekiq::Client.registered_workers
dengan Sidekiq::Workers.new
, lihat: github.com/mperham/sidekiq/blob/…
Ada API ergonomis untuk melihat dan mengatur antrian .
Ini tidak diperlukan secara default.
require 'sidekiq/api'
Berikut kutipannya:
# get a handle to the default queue
default_queue = Sidekiq::Queue.new
# get a handle to the mailer queue
mailer_queue = Sidekiq::Queue.new("mailer")
# How many jobs are in the default queue?
default_queue.size # => 1001
# How many jobs are in the mailer queue?
mailer_queue.size # => 50
#Deletes all Jobs in a Queue, by removing the queue.
default_queue.clear
Anda juga bisa mendapatkan beberapa statistik ringkasan.
stats = Sidekiq::Stats.new
# Get the number of jobs that have been processed.
stats.processed # => 100
# Get the number of jobs that have failed.
stats.failed # => 3
# Get the queues with name and number enqueued.
stats.queues # => { "default" => 1001, "email" => 50 }
#Gets the number of jobs enqueued in all queues (does NOT include retries and scheduled jobs).
stats.enqueued # => 1051
jika ada pekerjaan terjadwal. Anda dapat menghapus semua pekerjaan menggunakan perintah berikut:
Sidekiq::ScheduledSet.new.clear
jika ada antrian yang ingin Anda hapus semua pekerjaan, Anda dapat menggunakan perintah berikut:
Sidekiq::Queue.new.clear
Mencoba Lagi Pekerjaan juga dapat dihapus dengan perintah berikut:
Sidekiq::RetrySet.new.clear
Ada informasi lebih lanjut di sini di tautan berikut, Anda dapat melakukan pembayaran: https://github.com/mperham/sidekiq/wiki/API
Ada API untuk mengakses informasi waktu nyata tentang pekerja, antrian, dan pekerjaan.
Kunjungi di sini https://github.com/mperham/sidekiq/wiki/API
Solusinya adalah dengan menggunakan modul pengujian (memerlukan 'sidekiq / pengujian') dan menguras pekerja (MyWorker.drain).
Ada 'pekerja' yang digantung dalam antrean default dan saya dapat melihatnya melalui antarmuka web. Tetapi mereka tidak tersedia dari konsol jika saya menggunakan Sidekiq :: Queue.new.size
irb(main):002:0> Sidekiq::Queue.new.size
2014-03-04T14:37:43Z 17256 TID-oujb9c974 INFO: Sidekiq client with redis options {:namespace=>"sidekiq_staging"}
=> 0
Dengan menggunakan redis-cli, saya dapat menemukannya
redis 127.0.0.1:6379> keys *
1) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:7635c39a29d7b255b564970bea51c026-69853672483440:default"
2) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:0cf585f5e93e1850eee1ae4613a08e45-70328697677500:default:started"
3) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:7635c39a29d7b255b564970bea51c026-69853672320140:default:started"
...
Solusinya adalah:
irb(main):003:0> Sidekiq.redis { |r| r.del "workers", 0, -1 }
=> 1
Juga di Sidekiq v3 ada perintah
Sidekiq::Workers.new.prune
Tetapi untuk beberapa alasan itu tidak berhasil untuk saya hari itu
$ redis-cli
> select 0 # (or whichever namespace Sidekiq is using)
> keys * # (just to get an idea of what you're working with)
> smembers queues
> lrange queue:queue_name 0 -1 # (queue_name must be your relevant queue)
> lrem queue:queue_name -1 "payload"
keys *
produksi kecuali Anda menggunakan redis itu hanya untuk sidekiq. Terutama jangan menjalankannya jika Anda memiliki dataset besar (cache, dll). Redis adalah single-threaded dan keys *
blok - ini dapat mengakibatkan beberapa menit downtime pada kumpulan data besar (beberapa Gbs).
Rake tugas untuk menghapus semua antrian sidekiq:
namespace :sidekiq do
desc 'Clear sidekiq queue'
task clear: :environment do
require 'sidekiq/api'
Sidekiq::Queue.all.each(&:clear)
end
end
Pemakaian:
rake sidekiq:clear