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

Failed catalog price-change events are marked failed and never retried

risk · high · verified

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

  1. Catalog Integration Event Contracts
  2. Catalog API Host & Bootstrap
  3. Catalog Integration Event Handlers
  4. Catalog Integration Event Service
Open on the map

More from this board