TEMEL
Konfigürasyon Referansı
Hangfire global ayarları, SQL Server storage, background job server, dashboard ve Redis seçenekleri için toplu başvuru sayfası.
Bu tablolar, sık kullanılan Hangfire ayarlarının varsayılanlarını, etkilerini ve hangi durumda değiştirilmesi gerektiğini birlikte gösterir.
AddHangfire (Global Konfigürasyon)
| Ayar |
Varsayılan |
Açıklama |
Ne Zaman Değiştir |
SetDataCompatibilityLevel |
Version_110 |
Storage format sürümü. 180 = yeni optimizasyonlar |
1.8'e geçişte bir kez |
UseSimpleAssemblyNameTypeSerializer |
Kapalı |
Type name'leri kısa yazar (assembly version hariç) |
Her zaman aç — rolling deploy kolaylığı |
UseRecommendedSerializerSettings |
Kapalı |
JSON serializer ayarlarını optimize eder |
Her zaman aç |
SqlServerStorageOptions
| Ayar |
Varsayılan |
Açıklama |
Ne Zaman Değiştir |
SchemaName |
"HangFire" |
DB schema adı — tabloların oluşturulacağı schema |
Her zaman "hangfire" olarak ayarla (izolasyon) |
QueuePollInterval |
15 saniye |
Ne sıklıkla yeni job kontrol edilir |
TimeSpan.Zero önerilir (SlidingInvisibilityTimeout ile long-polling aktif olur, polling gereksiz) |
SlidingInvisibilityTimeout |
5 dakika |
İşlenen job'un başka server'a görünmez kalma süresi |
Uzun-süren job'larda artır (job süresi + buffer) |
CommandBatchMaxTimeout |
5 dakika |
SQL batch komutlarının max timeout'u |
Genelde değiştirme |
UseRecommendedIsolationLevel |
false |
ReadCommitted kullanır (Serializable yerine) |
Her zaman true — deadlock azaltır |
TryAutoDetectSchemaDependentOptions |
false |
Schema sürümüne göre DisableGlobalLocks, UseIgnoreDupKeyOption vb. otomatik aktifler |
Her zaman true (1.8 best practice) |
DisableGlobalLocks |
false |
App lock yerine row-level lock kullanır |
Multi-server'da true. Schema 7 gerektirir (yeni kurulumda otomatik, mevcut DB'de EnableHeavyMigrations ile migrate edin) |
PrepareSchemaIfNecessary |
true |
Uygulama başlarken tabloları oluşturur |
Production'da true bırak (auto-migration) |
EnableHeavyMigrations |
false |
Büyük schema değişikliklerini otomatik uygular |
Major version geçişinde veya DisableGlobalLocks için Schema 7'ye geçişte true yap, sonra false'a dön |
BackgroundJobServerOptions (AddHangfireServer)
| Ayar |
Varsayılan |
Açıklama |
Ne Zaman Değiştir |
WorkerCount |
CPU × 5 |
Eşzamanlı çalışan job thread sayısı |
IO-bound: varsayılan yeterli, CPU-bound: CPU×1-2 |
Queues |
["default"] |
Dinlenecek queue'lar (sıra = öncelik) |
Priority gerektiğinde: ["critical","default","low"] |
ServerName |
hostname:pid |
Dashboard'da görünen server ismi |
Multi-instance'da anlamlı isim ver |
ShutdownTimeout |
15 saniye |
Graceful shutdown'da max bekleme süresi |
En uzun job sürenize göre ayarlayın |
StopTimeout |
TimeSpan.Zero |
Server durma sinyali timeout |
ShutdownTimeout'tan kısa olmalı |
HeartbeatInterval |
30 saniye |
Server'ın "hayattayım" sinyali aralığı |
Genelde değiştirme |
ServerCheckInterval |
5 dakika |
Dead server temizleme kontrol aralığı |
Genelde değiştirme |
ServerTimeout |
5 dakika |
Bu süre heartbeat gelmeyen server "dead" sayılır |
HeartbeatInterval × 10+ olmalı |
SchedulePollingInterval |
15 saniye |
Scheduled job'ları kontrol etme aralığı |
Daha hassas scheduling istiyorsan düşür |
CancellationCheckInterval |
5 saniye |
İptal edilen job'ları kontrol aralığı |
Genelde değiştirme |
DashboardOptions
| Ayar |
Varsayılan |
Açıklama |
Ne Zaman Değiştir |
Authorization |
LocalRequestsOnly |
Kimlerin erişebileceği (filter listesi) |
Production'da HER ZAMAN custom filter ekle |
IsReadOnlyFunc |
null (everyone can write) |
Dinamik read-only kontrolü |
Role-based write kısıtlaması |
DashboardTitle |
"Hangfire Dashboard" |
Başlık metni |
Hangi ortam/uygulama olduğunu belirt |
DisplayStorageConnectionString |
true |
CS'yi dashboard'da gösterir |
Production'da HER ZAMAN false |
StatsPollingInterval |
2000 ms |
Dashboard istatistik yenileme sıklığı |
Yüksek trafikte artır (DB load azalt) |
RedisStorageOptions (Pro)
| Ayar |
Varsayılan |
Açıklama |
Ne Zaman Değiştir |
Prefix |
"hangfire:" |
Redis key prefix'i |
Multi-tenant veya aynı Redis'te çoklu uygulama |
Db |
0 |
Redis database numarası |
Uygulama cache'i ile karışmasın diye ayır |
InvisibilityTimeout |
30 dakika |
İşlenen job'un diğer server'lara görünmez kalma süresi |
En uzun job sürenize göre |
ExpiryCheckInterval |
5 dakika |
Expired job temizleme aralığı |
Genelde değiştirme |