ที่ Honeybadger เราใช้ Sidekiq บ่อยๆ และดีมาก แต่มีปัญหาหนึ่งที่ฉันพบบ่อย
...คุณเห็นไหม ปกติฉันไม่ได้เรียกใช้ Sidekiq เมื่อฉันอยู่ในระหว่างการพัฒนา แต่ในระหว่างการทดสอบด้วยตนเอง ฉันต้องจัดคิวงานจำนวนมาก ครั้งหน้าฉันจะทำ เรียกใช้ Sidekiq โดยพยายามประมวลผลงานเหล่านั้นทั้งหมด ไม่ดี
ง่ายต่อการค้นหาข้อมูลโค้ดที่จะลบงานออกจากคิว Sidekiq หนึ่งคิว แต่เรามี ล็อต ของคิว ฉันต้องการเคลียร์งานจากพวกเขาทั้งหมด หลังจากขุดค้นเล็กน้อย ฉันก็ได้คำตอบที่ดูเหมือนว่าจะใช้ได้ผลดี ดูเถิด!
# I originally had a more verbose piece of code here but mperham, Sidekiq's creator, set me straight :)
Sidekiq::Queue.all.each(&:clear)
มีวิธีดำเนินการโดยตรงมากกว่านี้ แต่วิธีนี้ใช้เฉพาะวิธีการที่กำหนดไว้ใน API สาธารณะของ Sidekiq ดังนั้นหวังว่ามันจะทำงานต่อไปแม้ว่าการเปลี่ยนแปลงภายในจะเปลี่ยนไป
ตอนนี้มีอีโมจิเพิ่มแล้ว!
หากคุณอ่านแหล่งข้อมูล sidekiq อย่างระมัดระวัง คุณอาจสังเกตเห็นว่าคุณสามารถใช้ 💣 อีโมจิเพื่อเรียกใช้วิธีการที่ชัดเจนได้ ไม่มีเรื่องตลก:
# 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