TickerQ: Modern .NET Uygulamaları İçin Yeni Nesil Background Job Scheduler
Background task yönetimi, modern yazılım mimarilerinin vazgeçilmez parçalarından biridir.
E-posta gönderimi, rapor oluşturma, cache temizleme, bildirim servisleri, veri senkronizasyonu ve yüzlerce farklı işlem kullanıcı isteğinden bağımsız olarak arka planda çalıştırılır.
Bugüne kadar .NET geliştiricilerinin en çok tercih ettiği çözümler arasında Hangfire ve Quartz.NET yer aldı.
Ancak son yıllarda ortaya çıkan TickerQ, modern .NET geliştirme anlayışına uygun mimarisi, yüksek performansı ve geliştirici deneyimi ile dikkat çekiyor.
TickerQ Nedir?
TickerQ, .NET için geliştirilmiş açık kaynaklı bir Background Job Scheduler kütüphanesidir.
Temel amacı;
- Zamanlanmış görevler çalıştırmak
- Cron tabanlı işler oluşturmak
- Tek seferlik görevleri planlamak
- Dağıtık (Distributed) sistemlerde job yönetimi yapmak
- Arka plan servislerini kolayca yönetmek
olarak özetlenebilir.
En dikkat çekici özelliklerinden biri ise klasik reflection tabanlı mimariler yerine Roslyn Source Generator kullanmasıdır. Böylece job kayıtları derleme zamanında oluşturulur ve çalışma anındaki ek yük önemli ölçüde azaltılır. :contentReference[oaicite:0]
Neden Yeni Bir Job Scheduler?
Piyasada yıllardır kullanılan başarılı çözümler mevcut.
Peki neden TickerQ?
Çünkü modern .NET uygulamaları artık;
- Native AOT
- Source Generator
- Minimal API
- Dependency Injection
- OpenTelemetry
- Cloud Native mimariler
gibi teknolojileri yoğun şekilde kullanıyor.
TickerQ da bu yeni nesil geliştirme yaklaşımını merkezine alarak tasarlanmış durumda.
Öne Çıkan Özellikler
Source Generator
TickerQ, Reflection yerine Source Generator kullanır.
Bunun avantajları:
- Daha hızlı başlangıç
- Daha düşük memory kullanımı
- Compile-time güvenliği
- Native AOT uyumluluğu
- Daha yüksek performans
Cron ve Time-Based Scheduling
İki farklı zamanlama modeli sunar.
Belirli bir zamanda çalıştır
30 dakika sonra çalıştır
veya
1 Ağustos saat 09:00'da çalıştır
Cron Görevleri
Örneğin;
Her gece saat 02:00
veya
Her 15 dakikada bir
çalışacak görevler tanımlanabilir.
Dependency Injection Desteği
TickerQ tamamen Microsoft Dependency Injection mimarisiyle uyumludur.
Job sınıflarınız normal servisler gibi davranır.
public class EmailJobs
{
private readonly IEmailService _emailService;
public EmailJobs(IEmailService emailService)
{
_emailService = emailService;
}
[TickerFunction("SendEmails")]
public async Task Execute(
TickerFunctionContext context,
CancellationToken cancellationToken)
{
await _emailService.SendPendingEmails();
}
}
Reflection gerektirmeden derleme sırasında gerekli kayıtlar oluşturulur.
Kurulum
NuGet paketi oldukça kolay kuruluyor.
dotnet add package TickerQ
Servis kaydı ise oldukça basit.
builder.Services.AddTickerQ();
var app = builder.Build();
app.UseTickerQ();
İlk çalışan job oluşturmak yalnızca birkaç dakikanızı alır.
İlk Job
Bir job tanımlamak oldukça kolaydır.
public class MyJobs
{
[TickerFunction("HelloWorld")]
public async Task Hello(
TickerFunctionContext context,
CancellationToken cancellationToken)
{
Console.WriteLine("Hello TickerQ");
}
}
Ardından istediğiniz zaman çalıştırabilirsiniz.
await manager.AddAsync(new TimeTickerEntity
{
Function = "HelloWorld",
ExecutionTime = DateTime.UtcNow.AddMinutes(1)
});
EF Core Entegrasyonu
TickerQ, EF Core desteğiyle gelir.
Bu sayede;
- Job geçmişi
- Retry bilgileri
- Çalışma durumları
- Zamanlama kayıtları
veritabanında saklanabilir.
Kendi DbContext yapınızı genişleterek mevcut uygulamanızla aynı transaction yapısını da paylaşabilirsiniz.
Gerçek Zamanlı Dashboard
TickerQ'nun en sevilen özelliklerinden biri Dashboard'dur.
Dashboard üzerinden;
- Çalışan işler
- Bekleyen işler
- Başarısız görevler
- Retry sayıları
- Geçmiş loglar
- Manuel tetikleme
gibi birçok bilgi gerçek zamanlı olarak izlenebilir. Dashboard, SignalR tabanlı canlı güncellemeler sunar.
Distributed Scheduling
Mikro servis mimarilerinde aynı job'ın birden fazla sunucuda çalışması ciddi problemlere yol açabilir.
TickerQ;
- Distributed Coordination
- Redis desteği
- Dead Node Cleanup
- Distributed Lock
gibi özelliklerle bu problemi çözmeyi hedefler.
OpenTelemetry Desteği
Modern gözlemlenebilirlik (Observability) çözümleri için OpenTelemetry paketi de sunulmaktadır.
Bu sayede background job'larınızı Prometheus, Grafana, Jaeger veya Azure Monitor gibi sistemlerle entegre edebilirsiniz.
TickerQ Kimler İçin Uygun?
TickerQ özellikle şu projelerde öne çıkar:
- SaaS uygulamaları
- ERP sistemleri
- Mikro servis mimarileri
- E-ticaret platformları
- Bildirim servisleri
- E-posta otomasyonları
- Finans uygulamaları
- Scheduled maintenance görevleri
Hangfire ve Quartz.NET'e Alternatif mi?
TickerQ doğrudan bu iki popüler çözüme alternatif olarak konumlanıyor.
Öne çıkan farklılıkları:
- Source Generator tabanlı mimari
- Reflection-free çalışma modeli
- Native AOT uyumluluğu
- Gerçek zamanlı Dashboard
- Modern DI yaklaşımı
- OpenTelemetry desteği
- Dağıtık sistemler için hazır mimari
Bu özellikleri sayesinde özellikle yeni geliştirilen .NET projelerinde değerlendirmeye değer bir seçenek haline geliyor.
Sonuç
TickerQ, yalnızca bir cron kütüphanesi değildir.
Modern .NET uygulamalarının ihtiyaç duyduğu zamanlanmış görev yönetimini; yüksek performans, compile-time güvenliği, gerçek zamanlı izleme ve genişletilebilir mimari ile bir araya getiren kapsamlı bir platformdur.
Eğer yeni bir .NET projesi geliştiriyorsanız ve arka plan görevleri için modern, ölçeklenebilir ve geliştirici dostu bir çözüm arıyorsanız, TickerQ kesinlikle incelemeniz gereken açık kaynak projelerden biridir.