2015-11-07 83 views
1

我有一个sidekiq middlware其中赶上自定义异常测试sidekiq工人和retryset Rails的MINITEST

require 'celluloid' 
require 'sidekiq/middleware/server/retry_jobs' 

module Sidekiq 
    class RetryMiddleware < Sidekiq::Middleware::Server::RetryJobs 

    def call(worker, msg, queue) 
     yield 
    rescue Sidekiq::Shutdown 
     # ignore, will be pushed back onto queue during hard_shutdown 
     raise 
    rescue Sidekiq::Retries::Retry => e 
     # force a retry (for workers that have retries disabled) 
     msg['retry'] = e.max_retries 
     attempt_retry(worker, msg, queue, e.cause) 
     raise e.cause 
    rescue Sidekiq::Retries::Fail => e 
     # seriously, don't retry this 
     raise e.cause 
    rescue Exception => e 
     # ignore, will be pushed back onto queue during hard_shutdown 
     raise Sidekiq::Shutdown if exception_caused_by_shutdown?(e) 
     raise e unless msg['retry'] 
     attempt_retry(worker, msg, queue, e) 
     raise e 
    end 

    end 
end 

和我的工作人员看起来像下面

class SomeWorker 
    include Sidekiq::Worker 
    sidekiq_options retry: false 

    def perform(input_data) 
    begin 
    logic to insert data into db 
    rescue Ione::Io::ConnectionClosedError => e 
    raise Sidekiq::Retries::Retry 
    end 
    end 

end 

当我试图测试SomeWorker [执行方法添加作业以重试。 在测试中我没有看到中间件获取调用预先

回答

1

你对自己做出这种方式太辛苦

谢谢,只是调用的方法。

RetryMiddleware.new.call(MyWorker.new, { ... }, 'default') do 
    MyWorker.new.perform(...) 
end