क्या सांत्वना आदेश कतार में व्हाट्सएप को देखने और साइडकीक में कतार को साफ करने के लिए हैं?


97

मैं देरी में कतार में जाने के लिए सांत्वना में जाने के लिए देरी से काम करने की विधि का उपयोग कर रहा हूँ, और जरूरत पड़ने पर कतार को साफ करने में आसानी। क्या इसके लिए साइडकीक में समान आदेश हैं? धन्यवाद!


1
जैसा कि दूसरों द्वारा उल्लेख किया गया है, नीचे चयनित उत्तर को हटा दिया गया है।
ईएमएफ

जवाबों:


90

मैंने कभी भी साइडकीक का उपयोग नहीं किया है, इसलिए यह संभव है कि कतारबद्ध नौकरियों को देखने के लिए केवल विधियां हैं, लेकिन वे वास्तव में सिर्फ रेडिस कमांड्स के आसपास रैपर होंगे, क्योंकि यह मूल रूप से सभी साइडिक (और रेसक्यू) है:

# 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

दुर्भाग्यवश, किसी विशिष्ट कार्य को हटाना थोड़ा अधिक कठिन होता है, क्योंकि आपको उसका सही मूल्य कॉपी करना होगा:

# Remove a specific job from a queue
Sidekiq.redis { |r| r.lrem "queue:app_queue", -1, "the payload string stored in Redis" }

आप यह सब और भी आसानी से कर सकते हैं 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"

क्या आपने साइडकीक के प्रारूप में अनुसूचित अनुसूचित नौकरियों के आयात / माइग्रेट करने का एक अच्छा तरीका देखा है? साइडकीक के नामस्थान को ki रिसक ’पर सेट करने से मुझे जो बताया जा सकता है, उससे अनुसूचित रोजगार नहीं मिल रहा है। धन्यवाद!
ब्रायन आर्मस्ट्रांग

31
यहाँ दिए गए कुछ समाधानों को हटा दिया गया है।
पीटर वेगेनेट

@BrianArmstrong Sidekiq.redis {| r | r.zrange ( "अनुसूची", 0, -1, {withscores: सच})} मुझे संदर्भित करने के लिए काम किया stackoverflow.com/questions/16009639/...
पॉल

2
जैसा कि Wagenet ने ऊपर बताया, ये उदाहरण पुराने हैं; जैसा कि mkirk ने नीचे बताया है, नवीनतम डॉक्स w / उदाहरण विकि पर हैं: github.com/mperham/sidekiq/wiki/API
odigity

1
Sidekiq::Client.registered_queues के साथ Sidekiq::Queue.allऔर उसके Sidekiq::Client.registered_workersसाथ बदल दिया गया है Sidekiq::Workers.new, देखें: github.com/mperham/sidekiq/blob/…
मार्टिन स्वोबोदा

136

कतार को देखने और प्रबंधित करने के लिए एक एर्गोनोमिक एपीआई है

यह डिफ़ॉल्ट रूप से आवश्यक नहीं है।

require 'sidekiq/api'

यहाँ प्रस्तुत है:

# 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

आप कुछ सारांश आँकड़े भी प्राप्त कर सकते हैं।

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 

9
यह वह दृष्टिकोण है जो अभी (अगस्त 2016) काम करता है। स्वीकृत उत्तर ~ 2013 के रूप में पुराना है।
जन क्लिमो

10

अगर कोई अनुसूचित नौकरी है। आप निम्न आदेश का उपयोग करके सभी नौकरियों को हटा सकते हैं:

Sidekiq::ScheduledSet.new.clear

यदि आपके द्वारा निम्न आदेशों का उपयोग करने वाली सभी नौकरियों को हटाने के लिए कोई कतार हो तो:

  Sidekiq::Queue.new.clear

रिट्रीव्स जॉब्स को निम्न कमांड द्वारा भी हटाया जा सकता है:

Sidekiq::RetrySet.new.clear

नीचे दिए गए लिंक पर अधिक जानकारी है, आप चेकआउट कर सकते हैं: https://github.com/mperham/sidekiq/wit/wI



2

वर्कअराउंड परीक्षण मॉड्यूल (साइडकीक / परीक्षण की आवश्यकता होती है) का उपयोग करना और कार्यकर्ता (MyWorker.drain) को सूखा देना है।


2

डिफ़ॉल्ट कतार में 'श्रमिक' लटके हुए थे और मैं उन्हें वेब इंटरफ़ेस के बावजूद देख पा रहा था। लेकिन मैं कंसोल से उपलब्ध नहीं थे अगर मैं साइडकीक का उपयोग करता था :: 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

Redis-cli का उपयोग करके मैं उन्हें खोजने में सक्षम था

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"
    ...

समाधान था:

irb(main):003:0>  Sidekiq.redis { |r| r.del "workers", 0, -1 }
=> 1

इसके अलावा साइडकीक v3 में एक कमांड है

Sidekiq::Workers.new.prune

लेकिन किसी कारण से यह मेरे लिए उस दिन काम नहीं आया


2

और यदि आप साइडकी रिट्री कतार को खाली करना चाहते हैं, तो यह है: Sidekiq::RetrySet.new.clear


2
$ 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"

9
कभी भी keys *उत्पादन पर न चलाएं जब तक कि आप उस साइडिस का उपयोग केवल साइडकीक के लिए न करें। यदि आपके पास बड़ा डेटासेट (कैश, आदि) है तो इसे विशेष रूप से न चलाएं। रेडिस एकल-थ्रेडेड और keys *ब्लॉक है - इसके परिणामस्वरूप बड़े डेटासेट (कई Gbs) पर डाउनटाइम के कई मिनट हो सकते हैं।
टिम्बर

1

सभी साइडकी कतारों को स्पष्ट करने के लिए रेक कार्य:

namespace :sidekiq do
  desc 'Clear sidekiq queue'
  task clear: :environment do
    require 'sidekiq/api'
    Sidekiq::Queue.all.each(&:clear)
  end
end

उपयोग:

rake sidekiq:clear
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.