यहां हनीबैगर में, हम साइडकीक का बहुत उपयोग करते हैं, और यह बहुत अच्छा है। लेकिन एक समस्या है जिसका मैं अक्सर सामना करता हूं।
... आप देखते हैं, जब मैं विकास में होता हूं तो मैं आमतौर पर साइडकीक नहीं चलाता हूं। लेकिन मैन्युअल परीक्षण के दौरान, मैं बहुत सारी नौकरियों को कतारबद्ध कर देता हूं। तो अगली बार जब मैं करता हूं साइडकीक चलाएं यह उन सभी नौकरियों को संसाधित करने का प्रयास करता है। अच्छा नहीं है।
कोड स्निपेट ढूंढना आसान है जो एक साइडकीक कतार से नौकरियों को हटा देगा। लेकिन हमारे पास बहुत कुछ है कतारों का। मैं उन सभी से नौकरियां खाली करना चाहता हूं। थोड़ी खुदाई के बाद, मैं एक ऐसा उत्तर लेकर आया जो अच्छी तरह से काम करता प्रतीत होता है। निहारना!
# I originally had a more verbose piece of code here but mperham, Sidekiq's creator, set me straight :)
Sidekiq::Queue.all.each(&:clear)
इसके बारे में जाने के लिए और अधिक प्रत्यक्ष तरीके हैं, लेकिन यह केवल साइडकीक के सार्वजनिक एपीआई में परिभाषित विधियों का उपयोग करता है, इसलिए उम्मीद है कि आंतरिक परिवर्तन होने पर भी यह काम करता रहेगा।
अब और इमोजी के साथ!
यदि आप साइडकीक स्रोत को ध्यान से पढ़ते हैं, तो आप देख सकते हैं कि आप स्पष्ट विधि को लागू करने के लिए इमोजी का उपयोग कर सकते हैं। कोई मज़ाक नहीं:
# https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/api.rb#L255
alias_method :💣, :clear
इसलिए हम अपने "सभी कतारों को साफ़ करें" कोड को इस प्रकार फिर से लिख सकते हैं:
Sidekiq::Stats.new.queues.each { |k, v| Sidekiq::Queue.new(k).💣 }
और चूंकि इमोजी बहुत अच्छे हैं, इसलिए हम सामूहिक विलोपन करने के लिए अपना स्वयं का तरीका बना सकते हैं।
def 💀
Sidekiq::Stats.new.queues.each { |queue_name, _| Sidekiq::Queue.new(queue_name).💣 }
end