Cara bekerja dengan Quartz.Net di C #

Saat mengerjakan aplikasi, Anda sering kali perlu menjalankan tugas tertentu di latar belakang dalam interval waktu yang telah ditentukan sebelumnya. Menjadwalkan pekerjaan dalam aplikasi merupakan sebuah tantangan, dan Anda dapat memilih dari banyak kerangka kerja yang tersedia, seperti Quartz, Hangfire, dll.

Quartz.Net telah digunakan untuk waktu yang lama dan memberikan dukungan yang lebih baik untuk bekerja dengan ekspresi Cron. Hangfire adalah kerangka penjadwal pekerjaan lain yang memanfaatkan pipeline pemrosesan permintaan ASP.Net untuk memproses dan menjalankan pekerjaan.

Quartz.Net adalah port .Net dari kerangka kerja penjadwalan pekerjaan Java yang populer. Ini adalah sistem penjadwalan pekerjaan open source yang dapat digunakan dari aplikasi terkecil hingga sistem perusahaan skala besar. Situs web resmi Quartz.Net menyatakan: "Quartz.Net adalah sistem penjadwalan pekerjaan sumber terbuka dengan fitur lengkap yang dapat digunakan dari aplikasi terkecil hingga sistem perusahaan skala besar."

Mulai

Anda dapat menginstal Quartz.Net dari bagian unduhan situs web resmi Quartz. Anda juga dapat menginstal Quartz.Net melalui Jendela Package Manager di Visual Studio IDE Anda.

Tiga komponen utama di Quartz adalah pekerjaan, pemicu dan penjadwal, yaitu, untuk membuat dan menjadwalkan pekerjaan di Quartz.Net, Anda memerlukan penjadwal, pemicu, dan pekerjaan. Saat pekerjaan menunjukkan tugas yang perlu dijalankan, pemicu digunakan untuk menentukan bagaimana pekerjaan akan dijalankan. Penjadwal adalah komponen yang menjadwalkan pekerjaan. Perhatikan bahwa Anda harus mendaftarkan pekerjaan dan pemicu Anda dengan penjadwal.

Pemrograman Quartz.Net di C #

Untuk membuat pekerjaan, Anda harus membuat kelas yang mengimplementasikan antarmuka IJob. Secara kebetulan, antarmuka ini mendeklarasikan metode Execute - Anda harus mengimplementasikan metode ini di kelas tugas kustom Anda. Cuplikan kode berikut menggambarkan bagaimana Anda dapat mengimplementasikan antarmuka IJob untuk mendesain kelas pekerjaan khusus menggunakan pustaka Quartz.Net.

public class Job : IJob

   {

       public void Execute(IJobExecutionContext context)

       {

           //Sample code that denotes the job to be performed

       }

   }

Berikut adalah implementasi sederhana metode Execute dari kelas Job - Saya akan menyerahkannya kepada Anda untuk mendesain kelas pekerjaan kustom Anda agar sesuai dengan kebutuhan aplikasi Anda. Potongan kode yang diberikan di bawah ini menulis nilai DateTime saat ini sebagai teks ke file. Perhatikan bahwa implementasi ini tidak aman untuk thread; itu hanya untuk tujuan ilustrasi saja.

public void Execute(IJobExecutionContext context)

        {

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

            {

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

            }

        }

Sekarang Anda telah menentukan kelas pekerjaan, Anda harus membuat kelas penjadwal pekerjaan Anda sendiri dan menentukan pemicu untuk pekerjaan Anda. Pemicu akan berisi metadata pekerjaan sebagai ekspresi cron. Anda dapat mengunjungi tautan ini untuk menghasilkan ekspresi cron.

Sekarang, bagaimana pekerjaan itu dijadwalkan? Nah, ada komponen bernama penjadwal pekerjaan yang bertanggung jawab untuk menjadwalkan pekerjaan Anda. Intinya, Anda dapat memanfaatkan penjadwal pekerjaan untuk menjadwalkan pekerjaan Anda untuk dieksekusi. Daftar kode berikut mengilustrasikan bagaimana kita dapat menentukan pemicu untuk pekerjaan kita dan kemudian mendaftarkan pekerjaan dan pemicu dengan penjadwal pekerjaan.

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);

       }

   }

Lihat daftar kode yang diberikan di atas. Perhatikan bagaimana nama dan grup pemicu telah ditentukan saat membuat instance pemicu. Setelah pemicu untuk pekerjaan ditentukan dan dikonfigurasi menggunakan ekspresi cron yang diperlukan, pemicu didaftarkan dengan penjadwal pekerjaan.

Anda juga bisa membuat pemicu yang diaktifkan setiap detik dan mengulanginya tanpa batas. Berikut cuplikan kode yang menggambarkan bagaimana Anda dapat membuat pemicu seperti ini.

ITrigger trigger = TriggerBuilder.Create()

 .WithIdentity("Job", "")

   .StartNow()

   .WithSimpleSchedule(s => s

       .WithIntervalInSeconds(10)

       .RepeatForever())

   .Build();

Anda tidak selalu membutuhkan layanan windows untuk memulai penjadwal Anda. Jika Anda menggunakan aplikasi web ASP.Net, Anda dapat memanfaatkan event Application_Start dari file Global.asax dan kemudian melakukan panggilan ke metode JobScheduler.Start () seperti yang ditunjukkan pada potongan kode di bawah ini.

public class Global : HttpApplication

   {

       void Application_Start(object sender, EventArgs e)

       {

           // Code that runs on application startup

           JobScheduler.Start();

       }

   }

Perhatikan bahwa JobScheduler adalah nama kelas khusus yang kami desain sebelumnya. Perhatikan bahwa Anda juga dapat memanfaatkan Quartz.Net untuk menyimpan pekerjaan Anda ke penyimpanan persisten, misalnya, Anda juga dapat mempertahankan pekerjaan Anda di database. Anda dapat mengetahui daftar semua toko pekerjaan yang didukung dari sini.