Module: Rage::Deferred::Task::ClassMethods

Defined in:
lib/rage/deferred/task.rb

Instance Method Summary collapse

Instance Method Details

#enqueue(*args, delay: nil, delay_until: nil, **kwargs) ⇒ Object



164
165
166
167
168
169
170
171
172
173
174
# File 'lib/rage/deferred/task.rb', line 164

def enqueue(*args, delay: nil, delay_until: nil, **kwargs)
  context = Rage::Deferred::Context.build(self, args, kwargs)

  Rage::Telemetry.tracer.span_deferred_task_enqueue(task_class: self, context:) do
    Rage::Deferred.__middleware_chain.with_enqueue_middleware(context, delay:, delay_until:) do
      Rage::Deferred.__queue.enqueue(context, delay:, delay_until:)
    end
  end

  nil
end

#max_retries(count) ⇒ Object

Set the maximum number of retry attempts for this task.

Examples:

class SendWelcomeEmail
  include Rage::Deferred::Task
  max_retries 10

  def perform(email)
    # ...
  end
end

Parameters:

  • count (Integer)

    the maximum number of retry attempts



120
121
122
123
124
125
126
127
128
129
130
# File 'lib/rage/deferred/task.rb', line 120

def max_retries(count)
  value = Integer(count)

  if value.negative?
    raise ArgumentError, "max_retries should be a valid non-negative integer"
  end

  @__max_retries = value
rescue ArgumentError, TypeError
  raise ArgumentError, "max_retries should be a valid non-negative integer"
end

#retry_interval(exception, attempt:) ⇒ Integer, ...

Override this method to customize retry behavior per exception.

Return an Integer to retry in that many seconds. Return super to use the default exponential backoff. Return false or nil to abort retries.

Examples:

class ProcessPayment
  include Rage::Deferred::Task

  def self.retry_interval(exception, attempt:)
    case exception
    when TemporaryNetworkError
      10 # Retry in 10 seconds
    when InvalidDataError
      false # Do not retry
    else
      super # Default backoff strategy
    end
  end

  def perform(payment_id)
    # ...
  end
end

Parameters:

  • exception (Exception)

    the exception that caused the failure

  • attempt (Integer)

    the current attempt number (1-indexed)

Returns:

  • (Integer, false, nil)

    the retry interval in seconds, or false/nil to abort



160
161
162
# File 'lib/rage/deferred/task.rb', line 160

def retry_interval(exception, attempt:)
  __default_backoff(attempt)
end