Herkese merhaba, herkesin yaptığı projelerde zamana bağlı olarak çalışması gerekecek yapılara ihtiyaç duymuştur. Bu gereksinimler pek çok farklı yöntemle çözülebilir. Ben bugün sizlere Quartz.Net library'sini kullanarak bu problemi nasıl çözdüğümüzden bahsediyor olacağım. Tabi ki sadece Quartz kütüphanesini kullanarak değil, bin bir türlü yöntemle Job tanımlayıp çözüm bulabilirsiniz fakat Quartz ile daha pratik ve hızlı bir şekilde sorunu halletmiş olursunuz.
Quartz.Net kütüphanesinden bahsetmemiz gerekirse, open source olup kaynak kodlarına Github üzerinden erişilebilir durumdadır. Aşağıdaki linklerden indirerek dll'i projenize referans olarak ekleyebilirsiniz.
Ya da ikinci bir yöntem olarak View - Other Windows - Package Manager Console açıldıktan sonra içerisine Install-Package Quartz yazıp, çalıştırarak proje içerisine otomatik olarak indirilip eklenmesini sağlayabilirsiniz. İşlem bittikten sonra References bölümünde Quartz kütüphanesinin projeye dahil edildiğini görebilirsiniz.
Quartz kütüphanesini "JOB" ve "TRIGGER" olmak üzere 2 kısma ayırabiliriz. Job kısmında yapılacak işler tanımlanır, trigger kısmında ise bu işlemlerin hangi zaman aralığında hangi sıklıkla yapılacağı (ne zaman tetikleneceği) belirtilir.
JOB :
Job sınıfı IJob Interface'inden implemente edilerek oluşturulur ve Execute metodu yeniden yazılır. Bu metod ilgili sınıf çağrıldığında yani job tetiklendiğinde ilk çalışacak yerdir. Asıl yapılacak işler burada - yada ilk buradan tetiklenir desek daha doğru olur - yazılır.
TRIGGER :
Yazılan Job sınıfının tetiklenmesini sağlayan yapılardır. Bu yapılarda job' ın ne zaman, hangi sıklıkla, ne kadar, hangi saatler/günler arasında çalışacağı gibi bilgiler tanımlanır. SimpleTrigger ve CronTrigger olmak üzere 2'ye ayrılır.
1 - Simple Trigger
Basit ve kolay zaman tanımlamalarının yapıldığı trigger çeşididir. Örneğin 5 sn' de bir görevi tetikleme olayı aşağıdaki gibi yazılabilir.(sonsuza kadar çalışır)
Tabi simple trigger içinde kullanılan bazı terimler vardır. Öncelikle onları açıklamak gerekirse;
StartAt : Zamanlayıcının ne zaman başlayacağını belirtir.
EndAt : Zamanlayıcının duracağı/sonlanacağı zamanı belirtir.
WithSimpleSchedule : Zamanlayıcı başladıktan sonraki programı belirtir.
WithIntervalInSeconds : Zamanlayıcının kaç sn'de bir tetikleneceğini belirtir.
WithIntervalInMinutes - Hours : Zamanlayıcının kaç dk veya saatte bir tetikleneceğini belirtir.
WithRepeatCount : Zamanlayıcının kaç tekrardan sonra duracağını belirtir.
RepeatForever : Zamanlayıcının sonsuza dek çalışacağını belirtir.
Simple trigger yapısına bir kaç örnek vermek vermemiz gerekirse;
- Sadece girilen saatte (yalnızca 1 defa) görevin tetiklenmesi istenirse..
- Görevin tetiklenmesinden sonra her 20 sn'de bir tetiklensin, ama sadece 5 kez çalışsın istenirse..
bir console application yaratılıp, ilgili zamanlayıcı çağrılırsa ekran görüntüsü aşağıdaki gibi olacaktır.
- Görevin girilen başlangıç ve bitiş saatleri arasında 10 sn de bir tetiklenmesi istenirse..
2 - Cron Trigger
Simple trigger yapısına göre daha kompleks zaman tanımlamalarının yapıldığı trigger yapısıdır. Kendine has zaman tanımlamaları Expression ifadeleri ile belirtilir. Örneğin "Her Pazartesi ve Cuma 08:30-12:30 Arasında Saatte Bir Çalışan Job" ifadesi cron trigger ile bağdaşabilir.
Cron trigger tanımında yer alan expression ifadenin bir anlamı vardır.
* * * * * Zaman komutunu ele alırsak
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───── Haftanın günü (0-6 arası değer veya *) (0 = Pazar’ı ifade eder.)
│ │ │ └────────── Ay (1-12 arası değer veya *)
│ │ └─────────────── Gün (1-31 arası değer veya *)
│ └──────────────────── Saat (0-23 arası değe rveya *)
└───────────────────────── Dakika (0-59 arası değer veya *)
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───── Haftanın günü (0-6 arası değer veya *) (0 = Pazar’ı ifade eder.)
│ │ │ └────────── Ay (1-12 arası değer veya *)
│ │ └─────────────── Gün (1-31 arası değer veya *)
│ └──────────────────── Saat (0-23 arası değe rveya *)
└───────────────────────── Dakika (0-59 arası değer veya *)
* karakteri "Her" manası taşır, "her gün", "her hafta", "her ay" gibi koyulduğu ifadenin yerine göre mana kazanabilir.
- Her gün 22: 30' da çalışan expression bir ifade için..
( 30 22 * * * )
- Her gün 8:00 - 17: 00 arasında dk'da 1 çalışan job
- Her pazartesi yarım saatte bir çalışan job
- Hafta içi her gün tam 12:00 ' de çalışan job
- Hafta içi her gün tam 00:00, 12:00, ve 15:00 olmak üzere 3 kez çalışan job
örnekleri daha fazla çoğaltılabilir. Bu arada ben Expression ifadelerle uğraşmak istemiyorum derseniz aşağıdaki araçtan faydalanarak Expression Cron Patternlerini oluşturabilirsiniz.
Bugün ki yazımızda Quartz.Net kütüphanesinden bahsettik, bir sonraki yazımızda bir web uygulamasında nasıl kullanılır, IIS üzerinde nasıl çalışır bu konulara değiniyor olacağız.
Hiç yorum yok:
Yorum Gönder