Why I Didn't Just Use Celery
A job queue is a promise that work you accepted will eventually happen. Making that promise honestly is the hard part.
10 posts
A job queue is a promise that work you accepted will eventually happen. Making that promise honestly is the hard part.
Splitting durable truth from fast dispatch buys a lot. It also creates a dual write I never made atomic.
A single Redis sorted set gives strict priority and FIFO inside each tier. Then I checked the arithmetic.
Retrying is easy. Deciding when to retry, and making sure everyone doesn't decide the same thing, is the actual work.
Check-then-insert looks correct and isn't. The only reliable fix is to stop checking and let a constraint decide.
Deadlines protect the worker, not the job. Once blocking code is involved, the difference stops being academic.
A status column records what a job was doing. It cannot record whether anyone is still doing it.
173,000 requests with zero errors told me nothing useful. The test that broke its own thresholds told me everything.
Parent and child is a claim about containment. Queued work isn't contained by anything, so it needs a different relationship.
An honest accounting of what this job queue guarantees, what it doesn't, and the config settings that do nothing at all.