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