Genel topoloji
Tüm servisler tek bir topic exchange (integration_event_bus) paylaşır. Publisher routing key ile yayınlar; her servis kendi shared queue’sunu ilgili routing key’lere bind eder.
Exchange ve routing key
MassTransitRabbitMqOptions (BuildingBlocks.EventBus.MassTransit.RabbitMq):
| Ayar | Default | Anlamı |
|---|---|---|
ExchangeName | integration_event_bus | Tüm servislerin paylaştığı topic exchange. Cross-service için aynı isimle hizalanmalı. |
ExchangeType | topic | Routing key pattern eşleştirmesi. |
RoutingKeyPrefix | integration.event | Routing key ön eki. |
integration.event.{EventName}. Örn. UserCreatedIntegrationEvent → integration.event.UserCreatedIntegrationEvent (event IBusEvent ise GetEventKey(), değilse tip adı).
Queue ve binding
Queue adıEventBusOptions.SubscriptionClientName’den gelir (bu projede DiyanetCleanArchitecture). Tüm servis tek shared queue kullanır; abone olunan her event tipi için ayrı binding kurulur:
ConcurrentMessageLimit ile PrefetchCount bilerek eşit tutulur: multi-instance senaryoda tek node tüm mesajları prefetch edip diğerlerini aç bırakmasın, kuyruk dağıtımı dengeli kalsın. Default ConcurrentMessageLimit = 10 (EventBusOptions).İki katmanlı retry + redelivery
Mesaj fail olduğunda iki katman devreye girer. Sıra kritik:UseDelayedRedelivery ÖNCE eklenir, UseMessageRetry SONRA — MassTransit zinciri “outer → inner” değerlendirir, yani önce in-process retry tüketilir, sonra delayed redelivery devreye girer.
| Katman | Ayar | Default | Davranış |
|---|---|---|---|
| In-process retry | RetryCount × RetryIntervalSeconds | 3 × 2s | Mesaj kuyruktan ayrılmaz, aynı consumer’da bekler. |
| Delayed redelivery | RedeliveryIntervalsMinutes | [0.16, 1, 5] dk (≈10s, 1dk, 5dk) | Mesaj delayed exchange üzerinden gecikmeli ana kuyruğa geri konur. |
(RetryCount + 1) × (RedeliveryIntervalsMinutes.Length + 1) = 4 × 4 = 16. Tüm denemeler tükenince mesaj kalıcı olarak {queue}_error (DLX) kuyruğuna düşer ve orada durur — sonsuz döngü mümkün değildir (listeler sınırlı).
Dirençli başlatma
Bus, broker’a bağlanamasa bile uygulamayı crash etmez:rabbitmq adıyla kaydedilir; broker down olduğunda status Degraded (Unhealthy değil), çünkü outbox sayesinde mesajlar kuyrukta birikir ve API çalışmaya devam eder.
Konfigürasyon
İlgili
Outbox Pattern
Mesajın exchange’e gelmeden önceki yolu.
Integration Events
Event tipi, routing key ve consumer.
Event Akışı
Uçtan uca event akışı.
Event Bus
EventBus building block.