Skip to main content

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): Routing key formatı: integration.event.{EventName}. Örn. UserCreatedIntegrationEventintegration.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.
Toplam max deneme = (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ı).
Delayed redelivery RabbitMQ rabbitmq_delayed_message_exchange plugin’ini gerektirir (docker/rabbitmq/enabled_plugins üzerinden enable edilir). cfg.UseDelayedMessageScheduler() bunu altyapı olarak kullanır; plugin yoksa redelivery beklenen şekilde çalışmaz.

Dirençli başlatma

Bus, broker’a bağlanamasa bile uygulamayı crash etmez:
Health check 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.