A long-running PHP process keeps everything the framework touched, so a worker that runs forever accumulates memory whether or not there is a leak. The three limits are…
Knowing when a set of queued jobs had all finished meant a counter in Redis and a race nobody was confident about. allowFailures decides the semantics: without it…
Redis stream ids are a millisecond timestamp plus a sequence number, which means a time range is a key range and needs no secondary index. Constructing an id…
An entry delivered to a consumer and never acknowledged stays in the pending list indefinitely, which is what makes recovery possible and what leaks if nothing sweeps it.…
A producer faster than its consumer fills a queue, and what happens when the queue is full is a decision somebody makes — or a decision the infrastructure…
A job dispatched inside a transaction can be picked up by a worker before the transaction commits, and the worker then cannot find the row it was told…
Two workers claiming with FOR UPDATE serialise, so adding workers adds no throughput — which is the thing a queue exists to provide. Keeping the transaction short is…
Testing that a controller queued something by starting a worker is slow and flaky; testing it by reading the queue table couples the test to the driver. Splitting…
Knowing when a set of queued jobs had all finished meant a counter in Redis and a race nobody was confident about. allowFailures is the flag that decides…