Rihanna v1.3.3 Rihanna.Job behaviour View Source

A behaviour for Rihanna jobs.

You must implement Rihanna.Job.perform/1 in your job, and it must return one of the following values:

  • :ok
  • {:ok, result}
  • :error
  • {:error, reason}

You can define your job like the example below:

defmodule MyApp.MyJob do
  @behaviour Rihanna.Job

  # NOTE: `perform/1` is a required callback. It takes exactly one argument. To
  # pass multiple arguments, wrap them in a list and destructure in the
  # function head as in this example
  def perform([arg1, arg2]) do
    success? = do_some_work(arg1, arg2)

    if success? do
      # job completed successfully
      :ok
    else
      # job execution failed
      {:error, :failed}
    end
  end
end

This behaviour allows you to tailor what you’d like to happen after your job either fails, or raises an exception.

You can define an after_error/2 method which will run before the job is placed on the failed job queue.

If you don’t define this callback, it will add it to the failed job queue without running anything.

def after_error(failure_reason, args) do
  notify_someone(__MODULE__, failure_reason, args)
end

Link to this section Summary

Functions

Checks whether a job implemented the after_error callback and runs it if it does

The name of the jobs table

Link to this section Types

Link to this type t() View Source
t() :: %Rihanna.Job{
  due_at: term(),
  enqueued_at: term(),
  fail_reason: term(),
  failed_at: term(),
  id: term(),
  term: term()
}

Link to this section Functions

Link to this function after_error(job_module, reason, arg) View Source

Checks whether a job implemented the after_error callback and runs it if it does.

The name of the jobs table.

Link to this section Callbacks

Link to this callback after_error(arg0, arg) View Source (optional)
after_error({:error, reason()} | :error | Exception.t(), arg()) :: any()
Link to this callback perform(arg) View Source
perform(arg :: any()) :: :ok | {:ok, result()} | :error | {:error, reason()}