queues

  • A dead letter queue nobody watches is a bin

    Routing failed messages somewhere they cannot block the main queue is the correct design, and it converts a loud failure into a silent one unless something alerts on…

  • Redis streams, and the broker you might not need

    5.0 shipped in October with a log-structured type and consumer groups. A list has no acknowledgement, which is why a crashed consumer loses the message.

  • SKIP LOCKED is why a queue table is suddenly viable

    Two workers selecting the next unprocessed row with FOR UPDATE serialise — the second waits for the first — so adding workers adds no throughput at all. SKIP…

  • Seven services in one development environment

    Apache, Nginx, PHP, MySQL, Redis, Beanstalkd and a mail catcher, on a laptop. Onboarding measured in minutes rather than days, and what it costs to run.

  • Beanstalkd in a container is four lines

    Beanstalkd is a queue and nothing else — no persistence by default, no clustering, no management UI — which makes it about the smallest thing that is genuinely…

  • Beanstalkd reserve, delete and bury in three sentences

    Beanstalkd models a job’s lifecycle explicitly, and the three verbs are the whole API worth knowing. A reserved job returns to the ready queue automatically when its time-to-run…

  • Consumer groups, and the pending entries list

    Reading a stream directly gives every consumer every message. A consumer group distributes entries between members and remembers which ones were handed out and not acknowledged. The pending…

  • The email address in the job payload nobody inventoried

    A queued job serialises its arguments, so a job dispatched with a customer object writes that customer’s name, email and address into the queue store — where it…

  • A queue table is not a queue

    SELECT … WHERE processed = 0 LIMIT 1, and two workers taking the same row. SKIP LOCKED makes the table viable; it does not make it a broker.

  • A stream is not a list, and XADD is not RPUSH

    A list used as a queue loses the message when a consumer crashes mid-work, because BRPOP removes it and there is no record that anything was in flight.…