techdiagrams.net
← All templates

Notification service

One pipeline for every notification: recipient-list expansion with preferences, priority queues so OTPs beat campaigns, delayed digests, a dedup window and a DLQ.

Open in editor — free, no login Download JSON
THE LINE — PRIORITY MEANS OTPS NEVER WAITOrderShippedcampaignexpand + filtertransactionaldigest @ 9am localseen? skipadapters · per-channel breakerspoison → parkOrder ServiceOrderShippedCampaign Tool2M-user blastNotify APIintents inRouterexpand · prefs · quiet hoursPreferenceschannels · quiet hours · localesPriority Queuetransactional firstScheduled Queuedigests · quiet-hours holdsDedup Windowevent+user · 24h TTLSendersprovider adaptersDead Lettersafter 5 attemptsEmailSES / ResendSMSTwilioPushAPNs / FCMwhy a priority queue, not two services:one pipeline = one dedup window, onepreference model, one audit trail —priority is a queue property, not a fork

What this design does

Every product grows a notification mess: marketing blasts starving password-reset OTPs, users double-notified across channels, digests firing at 3am. This design centralizes it: producers emit intents, a router expands recipient lists against preferences and quiet hours, priority queues guarantee transactional messages always cut the line, scheduled sends wait in a delayed queue, and a dedup window makes 'notify at most once per event per user' a property of the pipeline — not a hope. Failures park in a DLQ for humans instead of retry-looping forever.

The patterns it composes

Import it, attach your own numbers, and verify the design against failures — or read the engineering notes.