Skip to main content

Notification Delivery Pipeline

Summary​

DeliverWithRetryAsync delivers a single created message. It resolves the channel’s sender, then loops up to the retry policy’s maximum attempts, recording a delivery-attempt row on every try and updating the message status to Sent or Failed.

Delivery flow​

Sender resolution​

If the registry has no sender for the message channel, the message is marked Failed immediately with a descriptive LastError and a DeliveryFailed audit row — no attempts are made.

Attempt recording​

Each try appends a NotificationDeliveryAttempt capturing attempt number, channel, provider, Success/Failed status, an optional truncated error, start/complete timestamps and elapsed milliseconds. The message’s Attempts counter is updated per try.

Success and failure states​

On success the message becomes Sent with SentOnUtc set and LastError cleared. On the final failed attempt the message becomes Failed and a warning is logged. Cancellation during a delay returns without further attempts.

Manual retry​

RetryMessageAsync re-runs this pipeline for an existing message: it resets the message to Pending, clears the error, rebuilds the recipient (falling back to the stored address) and re-enters DeliverWithRetryAsync. ForceFail is never set on a manual retry.

Failed-message visibility​

Messages that exhaust delivery are queryable through the /notifications/failed endpoint, and per-message attempts through /notifications/{id}/attempts.

Verified absence​

There is no asynchronous delivery queue, no separate DeliveryProcessor worker and no cross-message batching. Delivery runs inline within the dispatch scope.

Requires Confirmation​

Whether failed messages are intended to be re-driven automatically (versus manual retry) requires confirmation.

Source References​

  • microservices/src/notification-service/Application/NotificationDispatcher.cs
  • microservices/src/notification-service/Channels/ChannelSenderRegistry.cs
  • microservices/src/notification-service/Domain/NotificationEntities.cs

See Also​

Keywords​

Delivery, sender, attempt, failure handling, message status, manual retry.

Revision Information​

  • Status: Draft
  • Last reviewed: 2026-07-21
  • Next review: 2026-10-21