2017-10-23 7 views
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 

は、例外を発生させ、作業者を定義し、あなたが上げている特定の例外を無視するように

答えて

0

使用the New Relic Ruby agent optionerror_collector.ignore_errors New Relicエージェントでその例外を無視します。

# config/newrelic.yml 
common: &default_settings 
    error_collector: 
    ignore_errors: "ActionController::RoutingError,Sinatra::NotFound,RetryJob" 
関連する問題