Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
4 yazı bulundu #hangfire
Job Dashboard, Monitoring ve Alerting: Hangfire Dashboard, Quartz 4 Dashboard ve OpenTelemetry
Backend SERİ 10

Job Dashboard, Monitoring ve Alerting: Hangfire Dashboard, Quartz 4 Dashboard ve OpenTelemetry

Hangfire Dashboard varsayılan olarak yalnız local isteklere açık, ama aynı makinedeki bir proxy'den gelen istek de local sayılıyor: Docker üzerinden gelen istek 200 aldı. Production'da dashboard'u bir authorization policy'ye ve read-only moda bağla; Quartz 4 dashboard'u yetkilendirme olmadan hiç başlamıyor. "Son başarılı çalışma 26 saatten eski" health check'i, Quartz 4'ün OpenTelemetry span ve metric'leri ve JobId taşıyan structured log'lar görünürlüğü tamamlar.

8 Kas 2026 10 dk 4
Background Job'larda Retry ve Idempotency: At-Least-Once Gerçeğiyle Yaşamak
Backend SERİ 07

Background Job'larda Retry ve Idempotency: At-Least-Once Gerçeğiyle Yaşamak

Background job en az bir kez, bazen iki kez çalışır; retry bunu daha da olası kılar. Hangfire varsayılan olarak 10 kez artan aralıklarla dener, kalıcı hatalar ExceptOn ile retry'dan çıkarılır; Quartz 4'te retry policy açıkça tanımlanır. "Önce kontrol et, sonra gönder" iki eşzamanlı çalışmada iki e-posta üretir; unique key ile önce sahiplenmek tek e-postaya indirir, dış API'ye Idempotency-Key başlığı aynı işi uçtan uca yapar.

8 Kas 2026 12 dk 4
Hangfire ile Kalıcı Job'lar: Fire-and-Forget, Delayed, Recurring ve Continuation
Backend SERİ 05

Hangfire ile Kalıcı Job'lar: Fire-and-Forget, Delayed, Recurring ve Continuation

Hangfire bir method çağrısını tip adı, method adı, parametre tipleri ve JSON'a serialize edilmiş argümanlarla veritabanına yazar; restart'ta kaybolmaz ve varsayılan olarak 10 kez yeniden denenir. Bu yüzden argüman olarak yalnız id geçilir: DbContext serialize edilemez, entity ise bayat bir kopya olarak saklanır. Method'u yeniden adlandırınca kuyrukta bekleyen eski job'lar bulunamayan method hatasıyla retry'a düşer.

8 Kas 2026 10 dk 4
Request Dışında İş Yapmak: Fire-and-Forget, BackgroundService, Hangfire ve Quartz.NET Arasında Seçim
Backend SERİ 01

Request Dışında İş Yapmak: Fire-and-Forget, BackgroundService, Hangfire ve Quartz.NET Arasında Seçim

Controller içinde Task.Run ile başlatılan iş, request scope'u kapanınca DbContext'i kaybeder, exception'ı sessizce yutar ve deploy'da yarıda kalır; işi host'un yönettiği bir yere devretmek gerekir. Seçimi beş soru belirler: iş restart'ta kaybolabilir mi, zamanlı mı, retry ve dashboard gerekir mi, kaç instance var; cevaplara göre BackgroundService, Hangfire, Quartz.NET ya da platform scheduler.

8 Kas 2026 10 dk 4
Blog Haritası