Ruby on rails 如何在不引发异常的情况下重试sidekiq工作程序
我的sidekiq工作人员使用get请求获取语音识别结果,响应状态将为“成功”、“失败”或“正在运行”。当状态为“RUNNING”时,我想在10分钟内重试sidekiq worker。如何在没有睡眠或引发异常的情况下重试。因为睡眠会消耗太多资源,引发异常会留下我不想记录的newrelic错误日志Ruby on rails 如何在不引发异常的情况下重试sidekiq工作程序,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,我的sidekiq工作人员使用get请求获取语音识别结果,响应状态将为“成功”、“失败”或“正在运行”。当状态为“RUNNING”时,我想在10分钟内重试sidekiq worker。如何在没有睡眠或引发异常的情况下重试。因为睡眠会消耗太多资源,引发异常会留下我不想记录的newrelic错误日志 class GetAsrTextWorker include Sidekiq::Worker sidekiq_options :queue => :default, :retry =>
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中出现我不想记录的错误日志。使用错误收集器。忽略错误忽略您引发的特定异常:
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
定义可引发的自定义异常:
# lib/retry_job.rb
class RetryJob < StandardError; end
忽略New Relic代理的异常:
# config/newrelic.yml
common: &default_settings
error_collector:
ignore_errors: "ActionController::RoutingError,Sinatra::NotFound,RetryJob"