Sidekiq - Обрабатывать только ошибку после x попыток?

Я использую sidekiq для обработки тысяч заданий в час - все они проверяют внешний API (Google). Один из X тысяч запросов вернет неожиданный (или пустой) результат. Насколько я могу сказать, это неизбежно при работе с внешним API.

В настоящее время, когда я сталкиваюсь с таким ответом, я поднимаю исключение, чтобы логика повторных попыток автоматически позаботилась об этом при следующей попытке. Что-то не так действительно с одной и той же работой много раз. Исключения обрабатываются Airbrake.

Однако мой воздушный тормоз забит этими мини-отключениями, которые на самом деле не являются "проблемами". Я бы хотел, чтобы Airbrake был уведомлен об этих проблемах только в том случае, если одна и та же работа провалилась X раз.

Возможно ли

  • отключите автоматическую интеграцию с воздушным тормозом, чтобы я мог использовать sidekiq_retries_exhausted, чтобы сообщить об ошибке вручную через Airbrake.notify
  • Как-то спасти ошибку, чтобы она не уведомляла Airbrake, а продолжала повторять попытку?
  • Делать это по-другому, о чем я не думаю?

Вот мой набросок кода

class GoogleApiWorker
  include Sidekiq::Worker
   sidekiq_options queue: :critical, backtrace: 5

  def perform
    # Do stuff interacting with the google API
  rescue Exception => e
    if is_a_mini_google_outage? e
      # How do i make it so this harmless error DOES NOT get reported to Airbrake but still gets retried?
      raise e
    end
  end

  def is_a_mini_google_outage? e
    # check to see if this is a harmless outage
  end    
end

1 ответ

Насколько я знаю, у Sidekiq есть класс для повторных попыток и заданий, вы можете получить текущую работу с помощью аргументов (сравнение - он не может быть эффективен) или jid (в этом случае вам нужно где-то записать jid), проверьте количество повторяет попытку и затем уведомляет или нет Airbrake.

https://github.com/mperham/sidekiq/wiki/API https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/api.rb

(Я просто не даю больше информации, потому что не могу)

Если вы ищете решение Sidekiq https://blog.eq8.eu/til/retry-active-job-sidekiq-when-exception.html

если вас больше интересует настройка Airbrake, чтобы вы не получали эти ошибки до определенной повторной проверки Airbrake::Sidekiq::RetryableJobsFilter

https://github.com/airbrake/airbrake

Другие вопросы по тегам