Kako raditi s Quartz.Netom na C #

Kada radite na aplikacijama, često ćete trebati izvršavati određene zadatke u pozadini u unaprijed definiranim intervalima. Zakazivanje poslova u aplikacijama izazov je i možete birati između mnogih raspoloživih okvira, poput Quartza, Hangfirea itd.

Quartz.Net se koristi već duže vrijeme i pruža bolju podršku za rad s Cron izrazima. Hangfire je još jedan okvir za planiranje poslova koji koristi prednost cjevovoda za obradu zahtjeva ASP.Net za obradu i izvršavanje poslova.

Quartz.Net je .Net priključak popularnog okvira za planiranje poslova Java. To je sustav za raspored poslova otvorenog koda koji se može koristiti od najmanjih aplikacija do velikih poduzeća. Službena web stranica Quartz.Net kaže: "Quartz.Net je cjeloviti, otvoreni sustav raspoređivanja poslova koji se može koristiti od najmanjih aplikacija do velikih poslovnih sustava."

Početak rada

Quartz.Net možete instalirati iz odjeljka za preuzimanja službene web stranice Quartz. Quartz.Net možete instalirati i kroz prozor Upravitelja paketa u vašem Visual Studio IDE-u.

Tri primarne komponente u Quartzu su poslovi, okidači i planeri, tj. Za stvaranje i raspoređivanje poslova u Quartz.Netu trebali biste imati planere, okidače i poslove. Dok posao označava zadatak koji treba izvršiti, okidač se koristi za određivanje načina izvršavanja posla. Planer je komponenta koja raspoređuje poslove. Imajte na umu da biste svoje poslove i okidače trebali registrirati kod planera.

Programiranje Quartz.Net-a na jeziku C #

Da biste stvorili posao, trebali biste stvoriti klasu koja implementira IJob sučelje. Inače, ovo sučelje deklarira metodu Execute - ovu biste metodu trebali implementirati u svoju prilagođenu klasu posla. Sljedeći isječak koda ilustrira kako možete implementirati IJob sučelje za dizajniranje prilagođene klase posla pomoću biblioteke Quartz.Net.

public class Job : IJob

   {

       public void Execute(IJobExecutionContext context)

       {

           //Sample code that denotes the job to be performed

       }

   }

Evo jednostavne implementacije metode Execute klase Job - prepustit ću vama da dizajnirate svoju prilagođenu klasu posla prema potrebama vaše aplikacije. Isječak koda dan u nastavku zapisuje trenutnu vrijednost DateTime kao tekst u datoteku. Imajte na umu da ova implementacija nije sigurna u niti; to je samo radi ilustracije.

public void Execute(IJobExecutionContext context)

        {

            using (StreamWriter streamWriter = new StreamWriter(@"D:\Log.txt", true))

            {

                streamWriter.WriteLine(DateTime.Now.ToString());

            }

        }

Sada kada ste već definirali klasu posla, morat ćete stvoriti vlastitu klasu planera poslova i definirati okidač za svoj posao. Okidač će sadržavati metapodatke posla kao cron izraz. Možete posjetiti ovu vezu da biste generirali cron izraze.

E sad, kako je to da su poslovi zakazani? Pa, postoji komponenta koja se zove planeri poslova koja je odgovorna za raspoređivanje vaših poslova. U osnovi možete iskoristiti planere poslova kako biste rasporedili svoje poslove za izvršenje. Sljedeći popis kodova ilustrira kako možemo definirati okidač za svoj posao, a zatim registrirati posao i okidač s planerom poslova.

public class JobScheduler

   {

       public static void Start()

       {

           IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

           scheduler.Start();

           IJobDetail job = JobBuilder.Create().Build();

           ITrigger trigger = TriggerBuilder.Create()

               .WithIdentity("Job", "")

               .WithCronSchedule("0 0/1 * 1/1 * ? *")

               .StartAt(DateTime.UtcNow)

               .WithPriority(1)

               .Build();

              scheduler.ScheduleJob(job, trigger);

       }

   }

Pogledajte gore navedeni popis kodova. Imajte na umu kako su naziv i grupa okidača navedeni prilikom izrade instance okidača. Nakon što se okidač za posao definira i konfigurira pomoću potrebnog izraza cron, okidač se registrira u planeru poslova.

Možete i izraditi okidač koji se aktivira svake sekunde i ponavlja ga u nedogled. Evo isječka koda koji ilustrira kako možete izraditi ovakav okidač.

ITrigger trigger = TriggerBuilder.Create()

 .WithIdentity("Job", "")

   .StartNow()

   .WithSimpleSchedule(s => s

       .WithIntervalInSeconds(10)

       .RepeatForever())

   .Build();

Nije vam uvijek potrebna Windows usluga za pokretanje planera. Ako koristite web-aplikaciju ASP.Net, možete iskoristiti događaj Application_Start datoteke Global.asax, a zatim uputiti poziv JobScheduler.Start () metodi kao što je prikazano u isječku koda u nastavku.

public class Global : HttpApplication

   {

       void Application_Start(object sender, EventArgs e)

       {

           // Code that runs on application startup

           JobScheduler.Start();

       }

   }

Imajte na umu da je JobScheduler naziv prilagođene klase koju smo ranije dizajnirali. Imajte na umu da Quartz.Net možete koristiti i za pohranu svojih poslova u trajna skladišta, tj. Možete zadržati svoje poslove i u bazi podataka. Popis svih podržanih trgovina poslova možete znati ovdje.