WebJobs Azure
Hola que tal amigos, con el respecto al calendario #AdvientoXamarin, en este articulo hablaremos sobre un tema muy importante que nos puede ayudar en cuanto a nuestros proyectos.
Talvez te has preguntado, que tu proyecto necesita un apartado para realizar tareas para un determinado tiempo,hora,día ya sea para enviar recordatorios, correo, notificaciones.
Les presento Azure WebJobs
¿Qué es Azure WebJobs?
Azure WebJobs es un servicio dentro de Microsoft Azure que se encuentra dentro del conjunto Azure Web App Service y que nos permitirá ejecutar prácticamente cualquier operación que deseemos dentro del contexto de un Azure Web Site, como tareas programadas o contínuas. Desde un punto de vista más mundano y antiguo, podríamos asemejarlo a un servicio windows de los de antaño o un proceso «cron». Por ejemplo, podríamos programar el envío de correos programados como newletters o procesar información almacenada desde nuestro sitio web como caducar contenidos con fecha de caducidad.
Azure WebJobs es, quizás, uno de los servicios de Microsoft Azure más desconocidos a pesar de que ya tiene más de un año de vida. Actualmente está inmerso dentro de Azure Web App Service que es la nueva denominación que ha dado Microsoft a un conjunto de servicios entre los que se encuentra Azure Web Sites y Azure Mobile Services entre otros.
¿Qué puedo ejecutar como WebJob?
Actualmente, se pueden establecer como WebJobs los archivos de los siguientes tipos:
- .cmd, .bat, .exe (con windows cmd)
- .ps1 (con powershell)
- .sh (con bash)
- .php (con php)
- .py (con python)
- .js (con node)
¿Qué tipos de WebJob se pueden crear?
Se pueden crear dos tipos de Web Job, de ejecución contínua o programados. Estos últimos a su vez pueden ser de ejecución una única vez (triggers), que se ejecuten periódicamente hasta una fecha de caducidad o que se ejecuten periódicamente de forma indefinida, por lo que podemos plantearnos por ejemplo un WebJob que esté «escuchando» una cola de Microsoft Azure y que cuando entre una información realicen su procesamiento y la transformen en lo que necesitemos.
¿Qué precio tienen?
Al ejecutarse dentro del contexto de un Web Site, los servicios WebJobs no tienen un precio propio sino que se aplica al propio del Web Site en base al tiempo de procesamiento, el ancho de banda que consuma, con lo que el aumento de consume será, por lo general.
MANOS A LA OBRA!!!!!!
Como anteriormente comentaba, creare un proyecto web api para alojar el webjobs.
Como primer punto, debemos de tener una cuenta de azure.
Debemos de crear una cuenta de almacenamiento.
Le pondremos como nombre webjobsalmacenamiento. después le damos click en revisar y crear, valida todos los campos, y si todo esta bien, por ultimo le das click en crear y se genera la cuenta de almacenamiento
Ya creado la cuenta de almacenamiento. Seguiremos con la creación de la api.
Elegimos Asp.Net Web Application (.Net Framework).
Le ponemos como nombre WebJobsApi.
Elegimos Web Api.
Así quedara la api.
Ahora crearemos el WebJobs, le daremos click derecho al proyecto, opción Add, despues New Azure Web Jobs Project.
Les saldrá una pantalla como esta.
Elegiremos el nombre, el apartado que me interesa, es la parte de WebJob run mode: si recuerdan anteriormente les comentaba que hay dos tipos de webjobs continuos y ondemand, elegiremos ondeman para poder agregar tiempo definido para ejecutar tareas.
Quedara de esta manera, le daremos click en Ok.
Les creara este proyecto de consola.
Abriremos la clase Functions.cs, en esta clase ahi agregaremos la logica que ejecutará las tareas programadas.
En el app.config del proyecto de consola tenemos que agregar las credenciales de nuestra cuenta de almacenamiento de Azure que anteriormente creamos.
Como podemos agregar las credenciales???
Debemos haber iniciado sesión en visual studio con una cuenta vinculada en azure.
nos vamos en la parte de arriba de visual studio y elegimos la opcion de views y Cloud Explorer.
Elegiremos Storage Accounts. propiedades y elegimos. Primary Key, la cadena la copian y la pegan en
Copiamos la cadena string de Primary Connection String y lo pegamos en connectionString del app.config en los dos apartados.
Ahora crearemos la clase que enviara el correo.
Quedara de esta forma.
Ahora solo queda Agregalo en la clase Functions.cs
Ahora Podemos publicar nuestro web api, que contiene el webjobs.
Le damos click en Create.
Se creara nuestro Api sevice en Azure. despues solo daremos click en publicar.
Se Creara nuestro Web api.
Ahora ya creado nuestro web api que contiene nuestro web jobs, COMO SABREMOS QUE ESTA FUNCIONANDO???? O COMO SABREMOS QUE CADA QUE CIERTO TIEMPO ESTA ENVIANDO CORREOS??
Es una buena pregunta. como se habrán dado cuenta en ningún momento, agregue código para determinar el tiempo en que estará enviando correo.
Esto lo podemos hacer desde el portar de Azure. en nuestro Dashboard de azure, damos click en Api Service
Click en nuestra Api, en el menu lateral buscamos la opcion de Trabajos Web, le damos click, no mostrar nuestro WebJobs
Si se dan cuenta, no tenemos programado un tiempo determinado que se ejecutara nuestro webjobs, osea que cierto tiempo enviara los correos.
Para eso nos vamos en el menu lateral, opcion Editor de App Service.
Despues en ir, les abrira una pestaña del navegador. Les abrira una ventana como esta.
Daremos click en app_data, despues en jobs, despues en triggered,y WebJobsAvenimiento daremos click en este ultimo.
nos desplegara esto, y daremos click derecho, new file y crearemos un archivo con el nombre Settings.job.
en este archivo tendrá un formato json, ahí pondremos una expresión que sera el tiempo en que estará enviando los correos. agregamos la expresión, le diremos que cada 5 minutos envié un correo.
Les dejo un link en donde pueden validar las expresiones que agreguen.
Cerramos he actualizamos la pagina y nos vamos en el menú lateral en la parte de Trabajos Web, ahora su Webjobs tendra la tarea programada.
Ahora para que sus web jobs se puedan ejecutar todo el tiempo, le daremos click en la etiqueta color naranja. nos vamos en la opción de configuración general.
buscamos la opción de Siempre Activado, la activamos y guardamos cambios.
AHORA SU WEBJOBS SE ESTARA EJECUTANDO CADA 5 MINUTOS.
Les dejo el github del proyecto.