我正在使用sidekiq每小时处理数千个作业-所有这些作业都ping外部API(Google)。每X千个请求中就有一个会返回意外(或空)结果。据我所知,在处理外部API时,这是不可避免的。
目前,当我遇到这样的响应时,我会抛出一个Exception,以便重试逻辑在下次尝试时自动处理它。只有同一个作业多次失败才是真正的错误。这些错误由Airbrake处理。
然而,我的空气制动器被这些不是真正的“问题”的小中断堵塞了。我希望空气制动器只在相同的作业已经失败X次时才被通知这些问题。
有没有可能
- 禁用自动空气制动集成,以便我可以使用sidekiq_retries_exhausted通过空气制动手动报告错误。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
字符串
3条答案
按热度按时间f87krz0w1#
据我所知,Sidekiq有一个用于重试和作业的类,你可以通过参数(比较-不能有效)或jid(在这种情况下,你需要在某个地方记录jid)来获取当前作业,检查重试次数,然后通知是否有Airbrake。
https://github.com/mperham/sidekiq/wiki/APIhttps://github.com/mperham/sidekiq/blob/master/lib/sidekiq/api.rb的数据库
(我只是不给予更多的信息,因为我不能)
np8igboo2#
如果您正在寻找Sidekiq解决方案https://blog.eq8.eu/til/retry-active-job-sidekiq-when-exception.html
如果你对配置Airbrake更感兴趣,那么在某些重试检查
Airbrake::Sidekiq::RetryableJobsFilter
之前,https://github.com/airbrake/airbrake#airbrakesidekiqretryablejobsfilter
j8yoct9x3#
Sidekiq支持一个
sidekiq_retries_exhausted
钩子,如果你想记录一个条目或在所有重试失败时更新模型的状态,你可以为你的作业设置这个钩子:字符串