Photo: free stock photography (Unsplash licence) — see imprint
The admin worker lied to you
In development, tasks run because an admin browser tab is quietly processing the queue. In production nobody has the admin open at 3 a.m. — so the queue simply fills up. Tasks sit in 'queued' and nothing complains.
Run a real consumer
Run the message consumer as a supervised process (systemd, supervisor, a container) with a memory and time limit so it restarts cleanly. Disable the admin worker in production. This is the fix, and it takes fifteen minutes.
Then watch the queue depth
A consumer that dies silently looks exactly like one that is idle. Alert on queue depth and on the age of the oldest message — that catches both a dead worker and one that cannot keep up.
Beware the poison message
One malformed job that throws on every retry can block a queue forever. Configure a retry limit and a dead-letter queue so a single bad order does not stop every other order from being processed.
- Disable the admin worker; run a supervised consumer.
- Alert on queue depth and oldest-message age.
- Configure retries and a dead-letter queue.
We do this for a living — Shopware, Node.js, React, ERP integration and automation for B2B.
Talk to an engineer