Back to the journal

Real-time systems / 2 MIN READ

The message you missed still matters

Choosing a delivery mechanism means choosing what the system remembers.

Sai Sri Harsha Guddati ·

Redis Pub/Sub is useful when live listeners need immediate notifications. Its delivery model also places a clear boundary on what an application can assume: messages are delivered at most once, and a disconnected subscriber can miss them. Redis documents this behavior explicitly.

That boundary matters when the notification describes something more consequential than a transient update.

Separate notification from truth

Imagine a worker finishing a document-processing job while the browser briefly loses its connection. If the completion message exists only in Pub/Sub, the browser may keep displaying “processing” after the work is done.

The worker did its job. The notification mechanism did what it promised. The application still failed to reconcile them.

A durable job record can resolve that mismatch. The live message tells the client to look; the record tells the client what is true. On reconnect, the client reads the current state instead of assuming that every transition was observed.

This pattern does not make Pub/Sub durable. It gives durability a separate home.

Decide which events require history

Some events are disposable. A progress indicator moving from 41 percent to 42 percent may not need to survive a disconnect if the latest state is available. A final result, permission change, or recorded operation may require stronger treatment.

I would classify events by the consequence of missing them, then choose delivery and storage accordingly. A single channel carrying everything can obscure those differences.

When replay is necessary, evaluate a durable event mechanism and its actual acknowledgment, retention, and consumer semantics. Do not label a system replayable merely because messages have IDs.

Reconnection is part of normal operation

Connections drop for ordinary reasons: mobile networks, suspended tabs, deployment changes, and intermediate infrastructure. A reconnection path is therefore a primary workflow, not an obscure exception.

Test a listener that joins late. Test one that disconnects just before completion. Test duplicate notifications if the surrounding application may generate them. The important result is whether the client converges on the correct state.

The design question is simple: if nobody hears the message, does the system still know what happened? For work that matters, I want the answer to be yes.

More from the journal