From the eShop (AdventureWorks), mapped as three services architecture map
Failed catalog price-change events are marked failed and never retried
CatalogIntegrationEventService saves each event to the outbox in the same transaction as the catalog change, then publishes it; if the publish throws, PublishThroughEventBusAsync only calls MarkEventAsFailedAsync. Nothing in the catalog service reads failed or pending outbox rows back to resend them, so Ordering can wait on a stock answer, or miss a price change, that never arrives.
Impact: A RabbitMQ publish failure leaves whichever service is waiting on that OrderStockConfirmed or price-change event stalled indefinitely, since nothing in this repo retries a failed or pending outbox row.
Recommendation (medium effort): Add a background sweep that reads failed and in-progress IntegrationEventLog rows and republishes them, so MarkEventAsFailedAsync is not a dead end.
The trail
- Catalog Integration Event Contracts
- Catalog API Host & Bootstrap
- Catalog Integration Event Handlers
- Catalog Integration Event Service
More from this board
- Identified Command swallows a failed CreateOrder and still reports success on retry
- An unreachable embedding model blocks product price changes
- Order Queries reads straight from the write side's OrderingContext, not a separate read model
- RabbitMQ status handlers skip the idempotency check HTTP commands get
- Awaiting-validation stock check confirms orders for unknown product ids
- Order-status updates only reach shoppers on the WebApp process that handled the event
- A rejected order still empties the shopper's bag
- A retired catalog item breaks Cart Menu's basket load everywhere