ruby-on-rails Sidekiq -只处理x次重试后的错误?

zpjtge22  于 2023-11-20  发布在  Ruby
关注(0)|答案(3)|浏览(129)

我正在使用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

字符串

f87krz0w

f87krz0w1#

据我所知,Sidekiq有一个用于重试和作业的类,你可以通过参数(比较-不能有效)或jid(在这种情况下,你需要在某个地方记录jid)来获取当前作业,检查重试次数,然后通知是否有Airbrake。
https://github.com/mperham/sidekiq/wiki/APIhttps://github.com/mperham/sidekiq/blob/master/lib/sidekiq/api.rb的数据库
(我只是不给予更多的信息,因为我不能)

np8igboo

np8igboo2#

如果您正在寻找Sidekiq解决方案https://blog.eq8.eu/til/retry-active-job-sidekiq-when-exception.html
如果你对配置Airbrake更感兴趣,那么在某些重试检查Airbrake::Sidekiq::RetryableJobsFilter之前,
https://github.com/airbrake/airbrake#airbrakesidekiqretryablejobsfilter

j8yoct9x

j8yoct9x3#

Sidekiq支持一个sidekiq_retries_exhausted钩子,如果你想记录一个条目或在所有重试失败时更新模型的状态,你可以为你的作业设置这个钩子:

class FailingJob
  include Sidekiq::Job
  sidekiq_options retry: 3

  sidekiq_retries_exhausted do |job, ex|
    Sidekiq.logger.warn "Failed #{job['class']} with #{job['args']}: #{job['error_message']}"
  end
  
  def perform(*args)
    raise "or I don't work"
  end
end

字符串

相关问题