0
私のsidekiqワーカーは音声認識の結果を得るためにリクエストを取得し、応答ステータスは "成功"または "失敗"または "実行中"になります。ステータスが「実行中」の場合、サイドキック作業者を10分後に再試行します。睡眠を取らずに再試行するか、例外を発生させる睡眠はあまりにも多くのリソースを消費し、例外を発生させるため、記録したくない新しいエラーログを残します。例外を発生させずにsidekiqワーカーを再試行する方法
class GetAsrTextWorker
include Sidekiq::Worker
sidekiq_options :queue => :default, :retry => 5
sidekiq_retry_in do | count|
600 * (count + 1)
end
def perform(task_id):
# get request to get the outcome
if status == "SUCCESSD"
# save the outcome
elsif status == "FAILED"
raise AsrError
elsif status == "RUNNING"
raise "Asr running"
end
rescue AsrError => e
Sidekiq.logger.error e.message
end
end
このメソッドはこのワーカーを再試行しますが、記録したくないnewrelicには醜いエラーログが記録されます。
はあなたが上げることができますカスタム例外を定義します:
# app/workers/foo_worker.rb
class FooWorker
include Sidekiq::Worker
def perform
raise RetryJob
end
end
:
# lib/retry_job.rb
class RetryJob < StandardError; end
は、例外を発生させ、作業者を定義し、あなたが上げている特定の例外を無視するように