ExqBatch

Hex.pm

ExqBatch provides a building block to create complex workflows using Exq jobs. A batch monitors a group of Exq jobs and creates callback job when all the jobs are processed.

Example

{:ok, batch} = ExqBatch.new(on_complete: [queue: "default", class: CompletionWorker, args: ["complete"]])
{:ok, batch, jid} = ExqBatch.add(batch, queue: "default", class: Worker, args: [1])
{:ok, batch, jid} = ExqBatch.add(batch, queue: "default", class: Worker, args: [2])
{:ok, _batch} = ExqBatch.create(batch)

Checkout documentation for more information.

Config

config :exq,
middleware: [
Exq.Middleware.Stats,
ExqBatch.Middleware,
Exq.Middleware.Job,
Exq.Middleware.Manager,
Exq.Middleware.Logger
]

ExqBatch.Middleware middleware must be added before the Exq.Middleware.Job middleware. The middleware is used to track job life cycle.

config :exq_batch,
# TTL of a batch job. Under normal condition, batch will get deleted
# on completion. If a batch failed to complete for any reason, it
# will get deleted after TTL seconds
ttl_in_seconds: 60 * 60 * 24 * 30,
# All the data related to batch will be stored under the prefix in redis
prefix: "exq_batch",
# Optional. If present, batch middleware will be enabled only for
# the given queues. If not present, will be enabled for all queues.
queues: ["default"]

Caveats