BuildingBlocks.Contracts.Events—IntegrationEventbase sınıfı veIIntegrationEventHandler<T>kontratları (servisler arası paylaşılır).BuildingBlocks.EventBus—IEventBussoyutlaması, subscription registry, builder pattern.BuildingBlocks.EventBus.MassTransit.RabbitMq— aktif implementasyon: MassTransit + RabbitMQ, EF Outbox, retry/redelivery/DLX.
BuildingBlocks.EventBus.EventBusRabbitMQ (ham RabbitMQ.Client tabanlı) legacy’dir; yeni geliştirmede kullanılmaz. Outbox ve delayed redelivery yalnızca MassTransit paketinde vardır.Uçtan uca event akışı (domain event → integration event → Outbox → consumer) için Event-Driven Akış grubuna bakın.
Kontratlar
| Tip | Detay | Amaç |
|---|---|---|
IntegrationEvent | Guid Id (v7), DateTime CreatedAt (UTC); [JsonConstructor] deserialize’da Id/timestamp’i korur | Tüm integration event POCO’larının base’i; INotification implement eder |
IIntegrationEventHandler<T> | Task Handle(T @event) | Tipli handler kontratı (tüketici servis implement eder) |
IIntegrationEventHandler | Task Handle(IntegrationEvent @event) | Tipsiz base — keyed DI için |
CacheInvalidationIntegrationEvent | IReadOnlyCollection<string> Tags, string SourceNodeId | Multi-instance L1 cache senkron event’i (echo guard SourceNodeId) |
IEventBus
MassTransitEventBus’tır; DI döngüsünü önlemek için IPublishEndpoint’i lazy resolve eder ve event tipine göre routing key belirler.
MassTransitRabbitMqOptions
MassTransitRabbitMq bölümüne bind edilir.
| Üye | Varsayılan | Açıklama |
|---|---|---|
Host / VirtualHost / Username / Password | localhost / / / guest / guest | Bağlantı bilgileri |
ExchangeName | integration_event_bus | Tüm servislerin paylaştığı topic exchange |
ExchangeType | topic | Exchange tipi |
RoutingKeyPrefix | integration.event | Routing key öneki — {prefix}.{EventName} |
RetryCount | 3 | In-process retry sayısı |
RetryIntervalSeconds | 2 | In-process retry’lar arası bekleme |
RedeliveryIntervalsMinutes | [0.16, 1, 5] | Delayed redelivery aşamaları (dakika): 10 sn, 1 dk, 5 dk |
EventBusOptions (EventBus bölümü): SubscriptionClientName (kuyruk adı, örn. DiyanetCleanArchitecture), ConcurrentMessageLimit (varsayılan 10).
DI kaydı
AddMassTransitRabbitMqEventBus(...) bus’ı kurar; AddMassTransitSubscription<T, TH>() her event–handler çiftini fluent kaydeder.
Kullanım — publish + handle
Retry / DLX stratejisi
İki katmanlı, ikisi de sınırlı:- In-process retry (
UseMessageRetry) —RetryCount×RetryIntervalSeconds(örn. 3 × 2 sn). Mesaj kuyruktan ayrılmaz. - Delayed redelivery (
UseDelayedRedelivery) — in-process tükenince mesajRedeliveryIntervalsMinutesaşamalarıyla (10 sn → 1 dk → 5 dk) gecikmeli olarak kuyruğa geri konur. RabbitMQrabbitmq_delayed_message_exchangeplugin’i gerekir.
(RetryCount + 1) × (RedeliveryIntervalsMinutes.Length + 1) ile sınırlıdır. Tüm denemeler tükenince mesaj kalıcı olarak {queue}_error (DLX) kuyruğuna düşer.
İlgili
Integration event'ler
Event tasarımı, idempotency ve versiyonlama.
Outbox pattern
EF Outbox ile atomik publish.
RabbitMQ topolojisi
Exchange, kuyruk ve routing key konvansiyonları.
Cache invalidation
CacheInvalidationIntegrationEvent ile multi-instance senkron.