Pleroma Job Queue v0.3.0 PleromaJobQueue View Source

A lightweight job queue

Installation

Add pleroma_job_queue to your list of dependencies in mix.exs:

def deps do
  [
    {:pleroma_job_queue, "~> 0.3.0"}
  ]
end

Configuration

List your queues with max concurrent jobs like this:

config :pleroma_job_queue, :queues,
  my_queue: 100,
  another_queue: 50

You can disable pleroma_job_queue if you need to run your jobs synchronously:

config :pleroma_job_queue, disabled: true

Configure the scheduler like this:

config :pleroma_job_queue, :scheduler,
  enabled: true,
  poll_interval: :timer.seconds(10),
  store: PleromaJobQueue.Scheduler.Store.ETS
  • enabled - whether the scheduler is enabled (Default: true)
  • poll_interval - how often to check for scheduled jobs in milliseconds (Default: 10_000)
  • store - a module that stores scheduled jobs. It should implement the PleromaJobQueue.Scheduler.Store behavior. The default is an in-memory store based on ETS tables: PleromaJobQueue.Scheduler.Store.ETS.

The scheduler allows you to execute jobs at specific time in the future. By default it uses an in-memory ETS table which means the jobs won't be available after restart.

Link to this section Summary

Functions

Schedules a job to be enqueued at specific time in the future

Schedules a job to be enqueued after the given offset in milliseconds

Returns a maximum concurrent jobs for a given queue name

Schedule a repeating task that will be enqueued with given params according to the given cron expression

Link to this section Functions

Link to this function

enqueue(queue_name, mod, args \\ [], priority \\ 1) View Source
enqueue(atom(), module(), [any()], non_neg_integer()) :: any()

Enqueues a job.

Returns :ok.

Arguments

  • queue_name - a queue name(must be specified in the config).
  • mod - a worker module (must have perform function).
  • args - a list of arguments for the perform function of the worker module.
  • priority - a job priority (1 by default). The higher number has a lower priority.

Examples

Enqueue MyWorker.perform/0 with priority=1:

iex> PleromaJobQueue.enqueue(:example_queue, MyWorker)
:ok

Enqueue MyWorker.perform(:job_name) with priority=5:

iex> PleromaJobQueue.enqueue(:example_queue, MyWorker, [:job_name], 5)
:ok

Enqueue MyWorker.perform(:another_job, data) with priority=1:

iex> data = "foobar"
iex> PleromaJobQueue.enqueue(:example_queue, MyWorker, [:another_job, data])
:ok

Enqueue MyWorker.perform(:foobar_job, :foo, :bar, 42) with priority=1:

iex> PleromaJobQueue.enqueue(:example_queue, MyWorker, [:foobar_job, :foo, :bar, 42])
:ok
Link to this function

enqueue_at(timestamp, queue_name, mod, args \\ [], priority \\ 1) View Source
enqueue_at(pos_integer(), atom(), module(), [any()], non_neg_integer()) ::
  any()

Schedules a job to be enqueued at specific time in the future.

Arguments

  • timestamp - a unix timestamp in milliseconds
  • queue_name - a queue name (must be specified in the config).
  • mod - a worker module (must have perform function).
  • args - a list of arguments for the perform function of the worker module.
  • priority - a job priority (1 by default). The higher number has a lower priority.

Examples

Enqueue MyWorker.perform/0 at specific time:

iex> time = DateTime.to_unix(DateTime.utc_now(), :millisecond)
iex> enqueue_at(time, :example_queue, MyWorker)
:ok
Link to this function

enqueue_in(offset, queue_name, mod, args \\ [], priority \\ 1) View Source
enqueue_in(non_neg_integer(), atom(), module(), [any()], non_neg_integer()) ::
  any()

Schedules a job to be enqueued after the given offset in milliseconds.

Arguments

  • offset - an offset from now in milliseconds
  • queue_name - a queue name (must be specified in the config).
  • mod - a worker module (must have perform function).
  • args - a list of arguments for the perform function of the worker module.
  • priority - a job priority (1 by default). The higher number has a lower priority.

Examples

Enqueue MyWorker.perform/0 after 10 seconds:

iex> enqueue_in(:timer.seconds(10), :example_queue, MyWorker)
:ok
Link to this function

max_jobs(queue_name) View Source
max_jobs(atom()) :: non_neg_integer()

Returns a maximum concurrent jobs for a given queue name.

Link to this function

schedule(schedule, queue, mod, args \\ [], priority \\ 1) View Source
schedule(String.t(), atom(), module(), [any()], non_neg_integer()) ::
  :ok | {:error, String.t()}

Schedule a repeating task that will be enqueued with given params according to the given cron expression.

In case of invalid cron expression given, an error will be returned.

Examples

Enqueue MyWorker.perform/0 to be repeated every minute:

iex> PleromaJobQueue.schedule("* * * * *", :queue_name, MyWorker)
:ok

Enqueue MyWorker.perform(:arg1, :arg2) with priority 5 to be repeated every Sunday midnight:

iex> PleromaJobQueue.schedule("0 0 * * 7", :queue_name, MyWorker, [:arg1, :arg2], 5)
:ok

Invalid cron expression:

iex> PleromaJobQueue.schedule("9 9 9 9 9", :queue_name, MyWorker, [:arg1, :arg2], 5)
{:error, "Can't parse 9 as day of week"}