Muchas veces en el desarrollo de los aplicativos de negocio se requiere dotar de funcionalidad extra para cubrir aspectos relacionados con la ejecución de múltiples tareas en segundo plano, tales como, envío de correo electrónico, mantenimiento de datos o creación de informes.
Supongamos que tenemos ejecutando un servidor IIS con una aplicación ASP.NET MVC o con los servicios WCF necesarios para dar soporte a nuestro aplicativo de negocio. En cualquier caso, para ejecutar las tareas en segundo plano y que dichas tareas no consuman hilos del IIS optaremos por desarrollar un servicio Windows .NET para estos menesteres.
Pero, ¿y si este concepto lo orientamos a la programación en la nube? Aquí es cuando entra en juego la plataforma Azure y los Worker Roles.
¿Qué es un Worker Role?
Podríamos definir de forma sencilla que un Worker Role es como un servicio Windows orientado a la nube. Realmente, en terminología Azure, se trata de un tipo de servicio de nube que se utiliza normalmente para la ejecución de tareas en segundo plano que no requieren de la interacción con el usuario.
En vez de crear un Worker Role por cada una de nuestras tareas, la forma más rentable y óptima es crear solamente un Worker Role que sea multitarea, permitiendo ejecutar diferentes tipos de tareas según una programación predefinida.
¿Qué es y para qué nos sirve Quartz.NET?
Quartz.NET es el programador de tareas más robusto de código abierto para la plataforma .NET. Nos permite programar tareas simples o complejas. Las tareas se desarrollan como componentes estándar de .NET que pueden ejecutar prácticamente cualquier cosa. Quartz.NET incluye muchas características de clase empresarial, como la configuración en Clúster (balanceo de carga y tolerancia a fallos).
Creación de un Worker Role multitarea con Quartz.NET
Supongamos que tenemos una tarea de mantenimiento de informes que queremos que se ejecute cada hora.
Los ingredientes que vamos a utilizar para confeccionar este bonito plato son los siguientes:
- Visual Studio Professional 2013 Update 4
- SDK versión 2.5 de Azure para .NET
- Paquete NuGet versión 2.3.1 de Quartz.NET
Bien, pues comencemos con esta maravillosa receta. Estos son los pasos a seguir:
- Creamos una solución para la plataforma .NET versión 4.0 que va a contener un proyecto de servicio de nube de Azure denominado “QuartzCloudService”.
- A continuación agregamos un Worker Role denominado “QuartzWorkerRole”.
- Instalamos el paquete NuGet versión 2.3.1 de Quartz.NET en el proyecto “QuartzWorkerRole”.
- Definimos la tarea de mantenimiento de informes “ReportingMaintenanceJob” que implementa la interfaz “IJob” de Quartz.NET. Esta interfaz declara el método “Execute(IJobExecutionContext context)” que Quartz.NET invoca cada vez que se activa un desencadenador (trigger). En este método incluiremos el código necesario para realizar el mantenimiento de informes.
Ahora en la clase “WorkerRole” que se crea por defecto con la plantilla del proyecto, agregamos el método “StartScheduler” donde inicializamos Quartz.NET y programamos la tarea “ReportingMaintenanceJob” para que se ejecute cada hora. Para más información sobre el uso de Quartz.NET visita el enlace http://quartz-scheduler.net.
- Por último, completamos los métodos “OnStart” y “OnStop” para arrancar y parar la instancia del programador de tareas Quartz.NET.
Ahora solamente hace falta desplegar en Azure y nuestra tarea de mantenimiento de informes se ejecutará cada hora.
Más información:
Para saber en qué otros proyectos de Microsoft Azure te podemos ayudar desde Sogeti, visita nuestra web.
.NET Architect | Soluciones Microsoft | SOGETI ESPAÑA
0 comments on “Cómo programar tareas en la nube: Azure worker role + Quartz.Net”