You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Atomic claim via FOR UPDATE SKIP LOCKED (MySQL 8+, MariaDB 10.6+, PostgreSQL 9.5+); on SQLite the single-writer model provides the same guarantee.
Visibility timeout — jobs whose worker died (crashed, OOM-killed, timed out) are automatically returned to the queue.
Exponential backoff — retries are rescheduled with baseDelay * 2^retry_count, capped at 1 hour.
No long transactions — handle() runs outside any transaction, so external side-effects cannot be rolled back.
Typed jobs via JobInterface + PSR-11 dependency injection through createFromContainer.
UTC timestamps — all DB times written in UTC regardless of the PHP default timezone.
PSR-3 logging with full-fidelity error context — Throwables are forwarded under the PSR-3 exception key (trace + previous chain preserved for structured log sinks).
Observability hooks via JobQueueListener — onClaimed / onCompleted / onFailed / onReclaimed events for metrics, tracing, or context enrichment.
Long-running worker with signal-driven graceful shutdown and max-jobs / max-runtime / max-memory limits.
Operational API — reclaimStuck() (callable from a separate cron), getFailedJobs(), retry().
Optional deleteOnSuccess and LockGuard for preventing overlapping workers.