Introduction
BullMQ for Elixir - Full-featured job queue with OTP design.
Last updated
Was this helpful?
Was this helpful?
def deps do
[
{:bullmq, "~> 0.1.0"},
{:redix, "~> 1.2"} # Redis client
]
endmix deps.getdefmodule MyApp.Application do
use Application
def start(_type, _args) do
children = [
{Redix, name: :my_redis, host: "localhost", port: 6379}
]
Supervisor.start_link(children, strategy: :one_for_one)
end
end# Add a job to a queue
{:ok, job} = BullMQ.Queue.add("emails", "send-welcome", %{
to: "user@example.com",
template: "welcome"
}, connection: :my_redis)
IO.puts("Created job: #{job.id}")defmodule MyApp.EmailWorker do
def process(%BullMQ.Job{name: "send-welcome", data: data}) do
MyApp.Mailer.send_welcome(data["to"], data["template"])
{:ok, %{sent: true}}
end
end
# Start the worker
{:ok, worker} = BullMQ.Worker.start_link(
queue: "emails",
connection: :my_redis,
processor: &MyApp.EmailWorker.process/1,
concurrency: 5,
on_completed: fn job, result ->
Logger.info("Job #{job.id} completed")
end
)