Module: Qless::Middleware::RetryExceptions
- Defined in:
- lib/qless/middleware/retry_exceptions.rb
Constant Summary collapse
- NO_BACKOFF_STRATEGY =
lambda { |num| 0 }
Instance Method Summary collapse
- #around_perform(job) ⇒ Object
- #backoff_strategy ⇒ Object
- #exponential(base, options = {}) ⇒ Object
- #retry_on(*exception_classes) ⇒ Object
- #retryable_exception_classes ⇒ Object
- #use_backoff_strategy(strategy = nil, &block) ⇒ Object
Instance Method Details
#around_perform(job) ⇒ Object
4 5 6 7 8 9 10 11 |
# File 'lib/qless/middleware/retry_exceptions.rb', line 4 def around_perform(job) super rescue *retryable_exception_classes => e raise if job.retries_left <= 0 attempt_num = (job.original_retries - job.retries_left) + 1 job.retry(backoff_strategy.call(attempt_num)) end |
#backoff_strategy ⇒ Object
27 28 29 |
# File 'lib/qless/middleware/retry_exceptions.rb', line 27 def backoff_strategy @backoff_strategy ||= NO_BACKOFF_STRATEGY end |
#exponential(base, options = {}) ⇒ Object
31 32 33 34 35 36 |
# File 'lib/qless/middleware/retry_exceptions.rb', line 31 def exponential(base, = {}) rand_fuzz = .fetch(:rand_fuzz, 1) lambda do |num| base ** num + rand(rand_fuzz) end end |
#retry_on(*exception_classes) ⇒ Object
17 18 19 |
# File 'lib/qless/middleware/retry_exceptions.rb', line 17 def retry_on(*exception_classes) retryable_exception_classes.push(*exception_classes) end |
#retryable_exception_classes ⇒ Object
13 14 15 |
# File 'lib/qless/middleware/retry_exceptions.rb', line 13 def retryable_exception_classes @retryable_exception_classes ||= [] end |
#use_backoff_strategy(strategy = nil, &block) ⇒ Object
23 24 25 |
# File 'lib/qless/middleware/retry_exceptions.rb', line 23 def use_backoff_strategy(strategy = nil, &block) @backoff_strategy = strategy || block end |