Tại Honeybadger, chúng tôi sử dụng Sidekiq rất nhiều và nó rất tuyệt. Nhưng có một vấn đề mà tôi thường gặp phải.
... bạn thấy đấy, tôi thường không chạy Sidekiq khi đang trong quá trình phát triển. Nhưng trong quá trình thử nghiệm thủ công, tôi khiến rất nhiều công việc phải xếp hàng. Vì vậy, lần sau tôi làm chạy Sidekiq nó cố gắng xử lý tất cả các công việc đó. Không tốt.
Thật dễ dàng để tìm các đoạn mã sẽ xóa các công việc khỏi một hàng đợi Sidekiq. Nhưng chúng tôi có rất nhiều hàng đợi. Tôi muốn xóa công việc khỏi tất cả chúng. Sau khi đào sâu một chút, tôi đã đưa ra một câu trả lời có vẻ hoạt động tốt. Kìa!
# I originally had a more verbose piece of code here but mperham, Sidekiq's creator, set me straight :)
Sidekiq::Queue.all.each(&:clear)
Có nhiều cách trực tiếp hơn để giải quyết vấn đề này, nhưng cách này chỉ sử dụng các phương thức được xác định trong API công khai của Sidekiq, vì vậy hy vọng rằng nó sẽ tiếp tục hoạt động ngay cả khi nội bộ thay đổi.
Giờ đây với nhiều biểu tượng cảm xúc hơn!
Nếu bạn đọc kỹ nguồn sidekiq, bạn có thể nhận thấy rằng bạn có thể sử dụng 💣 emoji để gọi phương thức rõ ràng. Không đùa:
# https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/api.rb#L255
alias_method :💣, :clear
Vì vậy, chúng tôi có thể viết lại mã "xóa tất cả hàng đợi" của mình như sau:
Sidekiq::Stats.new.queues.each { |k, v| Sidekiq::Queue.new(k).💣 }
Và vì biểu tượng cảm xúc rất tuyệt, chúng tôi có thể tạo phương pháp 💀 của riêng mình để xóa hàng loạt.
def 💀
Sidekiq::Stats.new.queues.each { |queue_name, _| Sidekiq::Queue.new(queue_name).💣 }
end