Anything that doesn't have to finish before the user sees a response: emails, reports, ML scoring, exports, scheduled cleanups. Move it off the request path or pay in latency forever.
← Back to Server SideEmail, SMS, push, third-party API calls — anything that can block for seconds.
Image/video processing, PDF generation, ML inference, exports.
One user action → 10,000 downstream notifications. Enqueue many small jobs.
Nightly billing, weekly reports, hourly cache warm-ups, retention deletes.
"Webhook failed — try again in 1 min, then 5, then an hour."
"Order placed" event drives email, analytics, fulfillment — without coupling them to the API handler.
| Tool | Stack | Sweet spot |
|---|---|---|
| Sidekiq | Ruby + Redis | The Rails default. Fast, mature, simple ops. |
| Celery | Python + Redis/RabbitMQ | Long-time Python standard; lots of moving parts. |
| BullMQ | Node + Redis | Modern Node default; great DX, scheduled & repeatable jobs. |
| Hangfire | .NET + SQL Server / Redis | Built-in dashboard; persists jobs in the DB by default. |
| Quartz | JVM | Enterprise scheduling; rich cron and clustering. |
| Asynq / River | Go + Redis / Postgres | Idiomatic Go; type-safe payloads. |
| SQS / Pub/Sub / Service Bus | Cloud-managed | No broker to operate; plays well with serverless workers. |
| RabbitMQ | Self-hosted | Rich routing, exchanges, priorities — when shape of delivery matters. |
| Kafka | Self-hosted / Confluent / MSK | Event log, not just a queue — replayable, high-throughput. |
| Temporal / Inngest / Trigger.dev | Workflow engines | Long-lived, multi-step workflows with built-in retries & durability. |
| Postgres-as-queue | pg-boss, Oban, River, Graphile Worker | Skip the broker — transactional with your data. |
Pass an operation_id in the payload. Check-and-record it before doing side effects (insert into a processed_jobs table with a unique index). Second run hits the unique violation and exits cleanly.
Avoid running cron on every app instance — N replicas means N copies of your nightly job. Use a leader-elected scheduler (Hangfire, Quartz cluster, Kubernetes CronJob, BullMQ repeatable jobs) or a managed scheduler (EventBridge, Cloud Scheduler).
For jobs that span hours or days (onboarding flows, multi-step refunds, AI pipelines), reach for a workflow engine — Temporal, Inngest, Step Functions, Cadence. They persist state between steps so a worker restart doesn't lose progress.