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 thePleromaJobQueue.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
Enqueues a job
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
enabled?() View Source
enqueue(queue_name, mod, args \\ [], priority \\ 1)
View Source
enqueue(atom(), module(), [any()], non_neg_integer()) :: any()
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 haveperform
function).args
- a list of arguments for theperform
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
enqueue_at(timestamp, queue_name, mod, args \\ [], priority \\ 1)
View Source
enqueue_at(pos_integer(), atom(), module(), [any()], non_neg_integer()) ::
any()
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 millisecondsqueue_name
- a queue name (must be specified in the config).mod
- a worker module (must haveperform
function).args
- a list of arguments for theperform
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
enqueue_in(offset, queue_name, mod, args \\ [], priority \\ 1)
View Source
enqueue_in(non_neg_integer(), atom(), module(), [any()], non_neg_integer()) ::
any()
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 millisecondsqueue_name
- a queue name (must be specified in the config).mod
- a worker module (must haveperform
function).args
- a list of arguments for theperform
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
max_jobs(queue_name)
View Source
max_jobs(atom()) :: non_neg_integer()
max_jobs(atom()) :: non_neg_integer()
Returns a maximum concurrent jobs for a given queue name.
schedule(schedule, queue, mod, args \\ [], priority \\ 1) View Source
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"}