【问题标题】:Testing sidekiq worker and retryset Rails minitest测试 sidekiq worker 和 retryset Rails minitest
【发布时间】:2016-02-04 23:02:31
【问题描述】:

我有一个可以捕获自定义异常的 sidekiq 中间件

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 时,执行方法正在添加要重试的作业。 在测试中,我没有看到中间件被调用

提前致谢

【问题讨论】:

    标签: ruby sidekiq


    【解决方案1】:

    你对自己太苛刻了,只需调用方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多