From the eShop (AdventureWorks), mapped as three services architecture map

Order-status updates only reach shoppers on the WebApp process that handled the event

risk · medium · verified

Order Status Notification Service is a singleton (Extensions.cs:26) that keeps subscriptions in an in-memory dictionary keyed by buyer id. All six RabbitMQ order-status handlers, such as OrderStatusChangedToPaidIntegrationEventHandler, call NotifyOrderStatusChangedAsync on it, and it wakes only the circuits subscribed in that same process. The event handlers have no other way to reach a buyer's open circuits.

Impact: With more than one WebApp replica behind a load balancer, a shopper whose browser circuit is on a different instance than the one that processed the RabbitMQ event never gets the live status refresh — their Orders page only updates on a manual reload.

Recommendation (medium effort): Replace the in-process subscription dictionary with a mechanism that fans out across replicas — a SignalR backplane, Redis pub/sub, or routing the notification through the message bus so every instance can push to its own local circuits.

The trail

  1. Components
  2. Order Status Notification Service
  3. Order Status Event Handlers
  4. Service Registration
  5. Order Status Refresher
Open on the map

More from this board