Rihanna v1.1.2 Rihanna View Source
The primary client interface for Rihanna.
There are two ways to dispatch jobs with Rihanna:
- Using mod-fun-args which is a bit like RPC
- Using a module that implements
Rihanna.Job
and passing in one argument
See the documentation for enqueue/1
and enqueue/2
for more details.
Supervisor
You must have started Rihanna.Supervisor
otherwise you will see an error trying
to enqueue or retry jobs.
Database Connections
Rihanna requires 1 + N database connections per node, where 1 connection is used for the external API of enqueuing/retrying jobs and N is the number of dispatchers. The default configuration is to run one dispatcher per node, so this will use 2 database connections.
Notes on queueing
Rihanna uses a FIFO job queue, so jobs will be processed roughly in the order that they are enqueued. However, because Rihanna is a concurrent job queue, it may have multiple workers processing jobs at the same time so there is no guarantee of any ordering in practice.
Scheduling
You can schedule jobs for deferred execution using schedule/2
and
schedule/3
. Jobs scheduled for later execution will run shortly after the
due at date, but there is no guarantee on exactly when they will run.
Link to this section Summary
Functions
Enqueues a job specified as a simple mod-fun-args tuple
Enqueues a job specified as a module and one argument
Retries a job by ID. ID can be passed as either integer or string
Schedule a job specified as a simple mod-fun-args tuple to run later
Schedule a job specified as a module and one argument to run later
Link to this section Types
schedule_option() :: {:at, DateTime.t()} | {:in, pos_integer()}
Link to this section Functions
enqueue({module(), atom(), list()}) :: {:ok, Rihanna.Job.t()}
Enqueues a job specified as a simple mod-fun-args tuple.
Example
> Rihanna.enqueue({IO, :puts, ["Umbrella-ella-ella"]})
enqueue(module(), any()) :: {:ok, Rihanna.Job.t()}
Enqueues a job specified as a module and one argument.
It is expected that the module implements the Rihanna.Job
behaviour and
defines a function Rihanna.Job.perform/1
.
The argument may be anything.
See Rihanna.Job
for more on how to implement your own jobs.
You can enqueue a job like so:
# Enqueue job for later execution and return immediately
Rihanna.enqueue(MyApp.MyJob, [arg1, arg2])
Retries a job by ID. ID can be passed as either integer or string.
Note that this only works if the job has failed - if it has not yet run or is currently in progress, this function will do nothing.
schedule({module(), atom(), list()}, schedule_options()) :: {:ok, Rihanna.Job.t()}
Schedule a job specified as a simple mod-fun-args tuple to run later.
Example
Schedule at a DateTime
:
due_at = ~N[2018-07-01 12:00:00] |> DateTime.from_naive!("Etc/UTC")
Rihanna.schedule({IO, :puts, ["Umbrella-ella-ella"]}, at: due_at)
Schedule in 5 minutes:
Rihanna.schedule({IO, :puts, ["Umbrella-ella-ella"]}, in: :timer.minutes(5))
schedule(module(), any(), schedule_options()) :: {:ok, Rihanna.Job.t()}
Schedule a job specified as a module and one argument to run later.
It is expected that the module implements the Rihanna.Job
behaviour and
defines a function Rihanna.Job.perform/1
.
The argument may be anything.
See Rihanna.Job
for more on how to implement your own jobs.
Example
Schedule at a DateTime
:
due_at = DateTime.from_naive!(~N[2018-07-01 12:00:00], "Etc/UTC")
Rihanna.schedule(MyApp.MyJob, [arg1, arg2], at: due_at)
Schedule in 5 minutes:
Rihanna.schedule(MyApp.MyJob, [arg1, arg2], in: :timer.minutes(5))