Message queues

Articles on running Node.js services over a message queue: work queues, competing consumers, guaranteed delivery, back-pressure, and Redis as the broker.

16 articles

Sep 1, 2026 · Mykhailo Stadnyk

Meeting compliance: how to talk to your Redis broker over TLS

The questionnaire asks whether data is encrypted in transit, and you know the answer for the edge. Then you remember the broker — the one connection every service holds open all day, carrying every argument and every return value, and speaking a protocol that puts them on the wire as text. Here is what encrypting it takes, what it costs, and the two places it is easy to get wrong.

read →
Aug 22, 2026 · Mykhailo Stadnyk

Autoscale on queue depth, not CPU

CPU tells you a process is busy, not whether anyone is waiting. An @imqueue service's backlog is a Redis list, so KEDA can scale on it with no exporter, no Prometheus and no code change — and the metrics server covers the case where you need more.

read →
Aug 13, 2026 · Serhiy Morenko

Distributed tracing for Node.js services over a message queue

The standard objection to queue-based RPC is that you lose the trace: the caller sends, something else picks it up, and the connection between them is gone. It isn't — the trace context rides in the request metadata. Here is a measured three-process trace, and the four ways it silently comes out wrong.

read →
Jul 28, 2026 · Andrii Glushko

Graceful shutdown and zero-drop deploys

Every deploy sends a kill signal to a process that is probably in the middle of something. Nothing 500s, no dashboard turns red, and the work is gone anyway. Here's what actually happens to an in-flight message on SIGTERM, and the built-in drain that keeps it.

read →
Jul 25, 2026 · Mykhailo Stadnyk

Delayed and scheduled work without adding a job system

"Send that email in 24 hours" usually turns into a second deployment, a second data model, and a job record shadowing a service method you already wrote. Often the message queue you already run can just do it. Here's how deferral works as a parameter, and what it costs.

read →
Jul 24, 2026 · Serhiy Morenko

Auto-scaling Redis broker: with and without broadcast

One Redis behind your message bus is a ceiling and a single point of failure. The promoter and unicaster modules turn a fleet of plain Redis instances into a horizontally auto-scaling broker — here are the recipes for networks that deliver broadcast and for clouds like GCP that don't, and how to encrypt the result when the brokers announce addresses no certificate can carry.

read →
Jul 23, 2026 · Serhiy Morenko

RPC over Redis in Node.js: patterns and pitfalls

How request/reply RPC over Redis actually works in Node.js — correlation, timeouts and at-least-once delivery, which of those @imqueue handles for you, and what it deliberately leaves to you: retrying a failed RPC call, coalescing duplicate concurrent calls with @lock, and the circuit breaker it does not ship.

read →
Jul 22, 2026 · Mykhailo Stadnyk

BullMQ alternatives for Node.js: an honest 2026 guide

BullMQ is the default Redis job queue for Node.js — but it isn't the only choice. Here's an even-handed map of the alternatives (Bee-Queue, pg-boss, Agenda, @imqueue/job and more), what each is actually good at, and how to pick.

read →
Jul 22, 2026 · Mykhailo Stadnyk

RPC between Node.js microservices over a message queue

Why route internal service-to-service calls through a message queue instead of HTTP or gRPC — and how @imqueue makes those calls fully typed with zero client boilerplate.

read →
Jul 14, 2026 · Mykhailo Stadnyk

Load balancing microservices without a load balancer

For internal service-to-service traffic, the load balancer you run and operate is often solving a problem a message queue solves for free. Here's the competing-consumers pattern, why pull beats push, and what you give up.

read →
Jul 12, 2026 · Mykhailo Stadnyk

Do your Node.js back-ends really need service discovery?

Consul, etcd, DNS-SD — service discovery is a lot of machinery to stand up. Sometimes you genuinely need it; often you don't. Here's how to tell, and how a queue makes the question disappear.

read →
Jul 9, 2026 · Mykhailo Stadnyk

Back-pressure for Node.js services

When a downstream service slows down, HTTP tends to turn that into a cascading failure. A queue absorbs the spike instead. Here's the difference, and the trade-offs to watch.

read →
Jul 7, 2026 · Mykhailo Stadnyk

Guaranteed message delivery: cost and when to use it

"Will I lose messages if a worker dies?" is the right question — and the answer is a trade-off, not a yes/no. Here's how guaranteed delivery works, what it costs, and how to choose per workload.

read →
Jun 22, 2026 · Mykhailo Stadnyk

Redis as a message bus: patterns beyond pub/sub

Most people know Redis pub/sub and stop there. Redis has richer primitives — lists, blocking pops, and streams — that make it a capable message bus. Here's a tour, and where each fits.

read →
Jun 12, 2026 · Andrii Glushko

@imqueue/job vs BullMQ: Redis job queues compared

Both are Redis-backed job queues for Node.js. @imqueue/job is small, safe-by-default and scheduling-capable; BullMQ is the feature-rich one. Here's an honest split — plus the thing @imqueue does that BullMQ doesn't.

read →
Jun 7, 2026 · Mykhailo Stadnyk

Benchmarking @imqueue: throughput and delivery modes

Real measured throughput for @imqueue's message queue — ~200k msg/sec unreliable, ~120k guaranteed on a 24-core box — what the delivery modes cost, and a reproducible harness to measure the figures that matter: yours.

read →