Merhaba, bir önceki yazımda (buradan ulaşabilirsiniz) Quartz.Net kütüphanesinden ayrıntılarıyla bahsetmiştik. Bu yazımda konuyu fazla uzatmadan uygulama senaryolarından ve web üzerinde çalışan örneklerinden bahsediyor olacağım. Konuya hemen giriş yapmak adına, zamanlanmış görevler nerelerde hangi senaryolar ile işimize yarar derseniz?
1 - Entegrasyonlarda. Farklı canlı sistemler arasında data aktarımlarının yaşandığı entegrasyonlarda çok işimize yarar. Örneğin 2 farklı ERP sisteminde sipariş,fatura,müşteri..vb gibi dataların sürekli online olarak birbirine aktarılması gerektiği durumlar olabilir. Bu durumda hemen bir web servis (WCF, Web Api vs) yazılıp, servisin içinde Quartz kütüphanesi kullanılarak zamanlanmış görevler kullanılabilir.
2 - Yoğun data içeren raporların oluşturulmasında kullanılabilir. Örneğin milyonlarca kayıt içeren ve çok fazla sayısal hesaplamaların olduğu, çalışması runtime için düşünüldüğünde uzun zaman alan günlük bazda alınması gereken raporlarınız olabilir. Bu tip durumlarda sistemin daha az yoğun olduğu (00:00 - 05:00) arasında çalışacak zamanlanmış görevler oluşturulabilir. Böylelikle hem sistem gündüz meşgul edilmemiş, hem de bir önceki güne ait raporlar sabah için geceden hazırlanmış olur.
3 - Başka bir senaryo olarak da uygulamalarımızda log kaydı atılan bu yüzden çok fazla şişen tablolar olabilir, bu tablolarda rahatlama yapmak sebebiyle gereksiz kayıtların belirli periyotlarla silinmesi gerekebilir. Bu tip durumlarda da gerek web servis üzerinde yazılan, gerekse web ortamında oluşturulan zamanlanmış görevler kullanılabilecektir.
4 - Belirli saatlerde, özel günlerde veya bir iş sonucu olarak ilgili kişilere mail gönderiminin yapılmasının istendiği durumlarda kullanılabilir. Mail gönderim olayı job olarak yazılan en sık durumlardan birisidir.
Bu örnekler elbette daha da çoğaltılabilir.Temel olarak zamanlanmış görevlerin daha çok aktarımlarda kullanıldığını kulak dolgunluğu olması açısından söyleyebiliriz.
Örnek - 1
Örneğimizde web sayfası üzerinden bir butonla tetiklenen ve DB 'e 10 sn de bir kayıt atan zamanlanmış görevin tasarımından bahsediyor olacağız. Bu yüzden DB 'de hemen bir tablo uluşturup, entity framework kullanarak tabloyu projeye include ettim.
Sonrasında Scheduler ve işin yapılacağı Job sınıflarımı tanımladım. Job'ın Execute metodunda EF ile oluşturduğum tabloya kayıt atma işlemini gerçekleştirdim.
Job :
Scheduler :
En son olarak web sayfamıza bir buton ekleyip, butonun event olayında zamanlayıcıyı başlatıyorum.
Çalıştırdıktan sonra 10 sn ' de bir tabloya attığı kayıtları gözlemleyebiliriz.
Dikkat ederseniz 10 sn aralıklarla job çalışarak istediğim işlemi yaptı. Belirtmem gereken bir nokta bu job tetiklendikten sonra bitiş paramatresi verilmediği ve RepeatForever() ile tanımlandığı için IIS üzerinde web sitesi çalıştığı müddetçe, tetiklenmeye devam edecektir. Job'ı durdurmak için ya web sitesinin durdurulması, yada IIS' in restart edilmesi gerekmektedir.
Örnek - 2
Şimdiki örneğimizde ise, web sitesinin IIS üzerinde çalışmaya başladığı andan itibaren "Global.Asax" üzerinden tetiklenmeye başlayan ve 25 sn aralıklarla mail atan bir zamanlanmış görev yazıyor olacağız.Hemen bir web application oluşturup, içerisine job ve scheduler sınıflarımızı ekleyelim.
EMailJob :
Scheduler :
Daha sonrasında projemize sağ tıklayıp, Add - Global Application Class dedikten sonra "Global.Asax" classımızı ekleyelip, "Application_Start" metodunda zamanlayıcımızı başlatalım.
Bu aşamadan sonra web projemizi IIS üzerinden yayınlamaya başladığımız andan itibaren Global.Asax üzerindeki Application_Start metodu zamanlayıcıyı tetikleyecek ve ortama 25 sn'de bir gmail üzerinden mail gönderecektir. Ben uygulamayı çalıştırıp gmail adresinizi kontrol ederseniz, maillerin geldiğini göreceksiniz.
Örnek - 2
Şimdiki örneğimizde ise, web sitesinin IIS üzerinde çalışmaya başladığı andan itibaren "Global.Asax" üzerinden tetiklenmeye başlayan ve 25 sn aralıklarla mail atan bir zamanlanmış görev yazıyor olacağız.Hemen bir web application oluşturup, içerisine job ve scheduler sınıflarımızı ekleyelim.
EMailJob :
Scheduler :
Daha sonrasında projemize sağ tıklayıp, Add - Global Application Class dedikten sonra "Global.Asax" classımızı ekleyelip, "Application_Start" metodunda zamanlayıcımızı başlatalım.
Bu aşamadan sonra web projemizi IIS üzerinden yayınlamaya başladığımız andan itibaren Global.Asax üzerindeki Application_Start metodu zamanlayıcıyı tetikleyecek ve ortama 25 sn'de bir gmail üzerinden mail gönderecektir. Ben uygulamayı çalıştırıp gmail adresinizi kontrol ederseniz, maillerin geldiğini göreceksiniz.