Cómo trabajar con Quartz.Net en C #

Cuando trabaje en aplicaciones, a menudo necesitará ejecutar ciertas tareas en segundo plano en intervalos de tiempo predefinidos. Programar trabajos en aplicaciones es un desafío, y puede elegir entre muchos marcos disponibles, como Quartz, Hangfire, etc.

Quartz.Net se ha utilizado durante mucho tiempo y proporciona un mejor soporte para trabajar con expresiones Cron. Hangfire es otro marco de trabajo del programador de trabajos que aprovecha la canalización de procesamiento de solicitudes de ASP.Net para procesar y ejecutar trabajos.

Quartz.Net es un puerto .Net del popular marco de programación de trabajos de Java. Es un sistema de programación de trabajos de código abierto que se puede utilizar desde aplicaciones más pequeñas hasta sistemas empresariales a gran escala. El sitio web oficial de Quartz.Net afirma: "Quartz.Net es un sistema de programación de trabajos de código abierto con todas las funciones que se puede utilizar desde las aplicaciones más pequeñas hasta los sistemas empresariales a gran escala".

Empezando

Puede instalar Quartz.Net desde la sección de descargas del sitio web oficial de Quartz. También puede instalar Quartz.Net a través de la ventana del Administrador de paquetes en su IDE de Visual Studio.

Los tres componentes principales de Quartz son trabajos, disparadores y programadores, es decir, para crear y programar trabajos en Quartz.Net, necesitaría tener programadores, disparadores y trabajos. Mientras que un trabajo denota la tarea que debe ejecutarse, se utiliza un disparador para especificar cómo se ejecutará el trabajo. El programador es el componente que programa los trabajos. Tenga en cuenta que debe registrar sus trabajos y activadores con el planificador.

Programación de Quartz.Net en C #

Para crear un trabajo, debe crear una clase que implemente la interfaz IJob. Por cierto, esta interfaz declara el método Execute; debe implementar este método en su clase de trabajo personalizada. El siguiente fragmento de código ilustra cómo puede implementar la interfaz IJob para diseñar una clase de trabajo personalizada utilizando la biblioteca Quartz.Net.

public class Job : IJob

   {

       public void Execute(IJobExecutionContext context)

       {

           //Sample code that denotes the job to be performed

       }

   }

A continuación, se muestra una implementación simple del método Execute de la clase de trabajo. Dejaré que usted diseñe su clase de trabajo personalizada para satisfacer las necesidades de su aplicación. El fragmento de código que se proporciona a continuación escribe el valor DateTime actual como texto en un archivo. Tenga en cuenta que esta implementación no es segura para subprocesos; es solo para fines ilustrativos.

public void Execute(IJobExecutionContext context)

        {

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

            {

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

            }

        }

Ahora que ya ha definido la clase de trabajo, deberá crear su propia clase de programador de trabajos y definir el desencadenante de su trabajo. El disparador contendrá los metadatos del trabajo como expresión cron. Puede visitar este enlace para generar expresiones cron.

Ahora bien, ¿cómo es que se programan los trabajos? Bueno, hay un componente llamado programador de trabajos que es responsable de programar sus trabajos. En esencia, puede aprovechar los programadores de trabajos para programar sus trabajos para su ejecución. La siguiente lista de códigos ilustra cómo podemos definir un disparador para nuestro trabajo y luego registrar el trabajo y el disparador con el programador de trabajos.

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

       }

   }

Consulte la lista de códigos proporcionada anteriormente. Observe cómo se ha especificado el nombre y el grupo del disparador al crear la instancia del disparador. Una vez que se define y configura el desencadenante del trabajo mediante la expresión cron necesaria, el desencadenante se registra en el programador de trabajos.

También puede construir un disparador que se dispare cada segundo y lo repita indefinidamente. Aquí hay un fragmento de código que ilustra cómo puede crear un disparador como este.

ITrigger trigger = TriggerBuilder.Create()

 .WithIdentity("Job", "")

   .StartNow()

   .WithSimpleSchedule(s => s

       .WithIntervalInSeconds(10)

       .RepeatForever())

   .Build();

No siempre necesita un servicio de Windows para iniciar su programador. Si está utilizando una aplicación web ASP.Net, puede aprovechar el evento Application_Start del archivo Global.asax y luego realizar una llamada al método JobScheduler.Start () como se muestra en el fragmento de código a continuación.

public class Global : HttpApplication

   {

       void Application_Start(object sender, EventArgs e)

       {

           // Code that runs on application startup

           JobScheduler.Start();

       }

   }

Tenga en cuenta que JobScheduler es el nombre de la clase personalizada que diseñamos anteriormente. Tenga en cuenta que también puede aprovechar Quartz.Net para almacenar sus trabajos en almacenamientos persistentes, es decir, también puede conservar sus trabajos en la base de datos. Puede conocer la lista de todos los puestos de trabajo admitidos desde aquí.