BuildingBlocks.Hangfire.MediatR.Extensions, MediatR komut/event’lerini Hangfire arka plan job’u olarak çalıştırmayı sağlar. Hangfire payload’ı Type’ı bilmeden serialize edemediği için paket iki şeyi çözer: (1) Hangfire serializer’ını TypeNameHandling ile yapılandırma, (2) MediatR mesajını MediatorSerializedObject’e paketleyip job içinde tekrar deserialize edip _mediator.Send(...) ile dispatch etme.
Çalışan Hangfire altyapısı (PostgreSQL storage
hangfire şeması, dashboard /jobs, server kuyrukları, DLX) için bkz. Hangfire servisi. Bu sayfa MediatR köprüsüne odaklanır.UseMediatR — Hangfire serializer kurulumu
Hangfire’ın global JSON ayarlarını, polimorfik tip bilgisini koruyacak şekilde yapılandırır. TypeNameHandling.All sayesinde serialize edilen MediatR komutu, worker tarafında doğru concrete tipe geri çözülebilir.
Köprü bileşenleri
MediatR mesajı doğrudan değil,MediatorSerializedObject zarfıyla taşınır. Bu zarf job storage’da güvenle saklanır ve worker’da yeniden kurulur.
| Tip | Rol |
|---|---|
IBusMessage | İşaretleyici (marker) — taşınabilir mesaj |
IBusCommand : IRequest, IBusMessage | Job olarak çalıştırılacak MediatR komutu |
ICommandBus | Komut enqueue/schedule API’si |
IEventBus | Event publish API’si |
ICommandExecuter / IEventDispatcher | Worker tarafı — deserialize edip _mediator.Send çağırır |
MediatorSerializedObject | FullTypeName, AssemblyName, Data (JSON), AdditionalDescription |
ICommandBus
| Metot | Amaç |
|---|---|
string Send<T>(T request, string description = null, ...) | Komutu hemen kuyruğa alır; job id döner |
string Send<T>(T request, string parentJobId, JobContinuationOptions, ...) | Başka bir job’ın devamı olarak zincirler |
void Schedule<T>(T request, DateTimeOffset scheduleAt, ...) | Belirli zamanda çalıştır |
void Schedule<T>(T request, TimeSpan delay, ...) | Gecikmeli çalıştır |
void ScheduleRecurring<T>(T request, string name, string cron, RecurringJobOptions, ...) | Cron tabanlı tekrarlı job |
IEventBus: void Publish<T>(...) ve Task PublishAsync<T>(...) — event’i IEventDispatcher üzerinden enqueue eder.
Serialize → enqueue → execute
CommandBus, mesajı MediatorSerializedObject’e paketleyip BackgroundJob.Enqueue<ICommandExecuter>(...) ile kuyruğa alır:
CommandExecuter zarfı çözer, tipi assembly’den bulur, JSON’u o tipe deserialize eder ve MediatR’a verir:
ICommandExecuter.ExecuteCommand [Queue("command-queue")] ile işaretlidir; bu işler Hangfire’da ayrı bir kuyrukta çalışır. Job dashboard’da MediatorSerializedObject.ToString() çıktısıyla (komut adı + açıklama) görünür.Kullanım
SendMonthlyReportCommandHandler ve tüm pipeline behavior’lar (validation, exception, authorization) arka planda da uygulanır.
İlgili
Hangfire servisi
PostgreSQL storage, dashboard ve server kuyrukları.
Application (CQRS)
Command/handler ve pipeline behavior’lar.
Event-Driven akış
Domain/integration event’lerle karşılaştırma.
Email servisi
SendBackground ile arka plan gönderim deseni.