2017-10-23 11 views
0

내 sidekiq worker가 음성 인식 결과를 얻기 위해 get 요청을 사용하면 응답 상태가 "SUCCESS"또는 "FAILED"또는 "RUNNING"이됩니다. 상태가 "실행 중"이면 10 분 안에 sidekiq 작업자를 다시 시도하고 싶습니다. 잠자기없이 재 시도하거나 예외를 제기 할 수 있습니까? 수면은 너무 많은 리소스를 소비하고 예외를 발생 시키므로 기록하고 싶지 않은 새로운 오류 로그가 남습니다.예외를 발생시키지 않고 sidekiq worker를 다시 시도하는 방법

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 당신이 제기하는 특정 예외를 무시 새 유적 에이전트에서 예외를 무시하십시오.

# config/newrelic.yml 
common: &default_settings 
    error_collector: 
    ignore_errors: "ActionController::RoutingError,Sinatra::NotFound,RetryJob"