Quartz Scheduler in Windows Service

Dikarenakan AppPool Pada IIS akan sleep jika aplikasi tidak diakses selama ± 20 menit, maka cara terbaik untuk membuat programmable scheduler adalah di windows service. Untuk contoh projectnya dapat diunduh di sini. Terkait apa saja yang perlu diubah akan dijelaskan di bawah.

ProjectInstaller.Designer.cs

private void InitializeComponent()
        {
            serviceProcessInstaller = new ServiceProcessInstaller();
            serviceInstaller = new ServiceInstaller();
            // 
            // serviceProcessInstaller
            // 
            serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
            serviceProcessInstaller.Password = null;
            serviceProcessInstaller.Username = null;
            // 
            // serviceInstaller
            // 
            serviceInstaller.Description = "Delva Scheduler Service"; //ubah Description
            serviceInstaller.DisplayName = "Delva Scheduler"; //ubah DisplayName
            serviceInstaller.ServiceName = "DelvaScheduler"; //ubah ServiceName
            serviceInstaller.StartType = ServiceStartMode.Automatic;
            serviceInstaller.AfterInstall += new InstallEventHandler(ServiceInstaller_AfterInstall);
            // 
            // ProjectInstaller
            // 
            Installers.AddRange(new Installer[]
            {
                serviceProcessInstaller,
                serviceInstaller
            });

        }

Setelah itu membuat logic dari scheduler, untuk contoh ini akan membuat scheduler untuk generate work order. Ada tiga class yang dibutuhkan untuk satu jenis scheduler.

1. Class Task
2. Class Job
3. Class Scheduler

Class Task berisi dari perintah kerja dari scheduler, class ini akan berjalan secara sequence asynchronous. Jika task sebelumnya belum selesai dieksekusi akan ditunda dulu sampai task sebelumnya selesai.

Class Job digunakan untuk mengeksekusi Class Task. Class ini harus turunan dari Interface IJob.

Class Scheduler digunakan untuk menjadwalkan Class Job.

Setelah semua class yang dibutuhkan sudah dibuat, langkah selanjutnya adalah implemtasi scheduler pada event windows service. Yang perlu diubah adalah event OnStart. Tekan F7 untuk menampilkan code pada file Service.cs.

Service.cs

public partial class Service : ServiceBase
    {
        public Service()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            //ubah bagian ini
            WorkOrderScheduler.Start();
        }

        protected override void OnStop()
        {
            StdSchedulerFactory.GetDefaultScheduler().Result.Shutdown();
        }

        protected override void OnContinue()
        {
            StdSchedulerFactory.GetDefaultScheduler().Result.ResumeAll();
        }

        protected override void OnPause()
        {
            StdSchedulerFactory.GetDefaultScheduler().Result.PauseAll();
        }

        internal void Test(string[] args)
        {
            OnStart(args);
            Console.ReadLine();
            OnStop();
        }
    }

Deploy & Install

1. Ubah build config dari debug ke release, lalu build projectnya
2. Copy file hasil build tersebut ke folder Publish
3. Kompres folder Publish ke zip, rar atau lainnya
4. Copy file hasil kompresi folder Publish ke server, lalu ekstrak
5. Run as Administrator file Install.bat

Topaz Moderato has written 14 articles

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>