5

Necesito escribir algunos datos en la base de datos cada 50 segundos más o menos. Es similar a un servicio de Windows que se ejecuta en segundo plano y hace su trabajo silenciosamente. Iniciar y detener no es una opción en mi caso, ya que necesito una pequeña cantidad de datos previamente insertados para almacenarlos en la memoria. ¿Cuál es la mejor solución para esto al usar Windows Azure o AWS?Tarea de ejecución prolongada (o para siempre) en Windows Azure

Gracias.

Respuesta

7

Con Windows Azure, puede elegir una función Web o Trabajador (ambas básicamente Windows 2008 Server R2 o SP2) y tener algún tipo de evento programado, como se sugirió @Lucifure. También puede ejecutar un programador, como Quartz.net, o aprovechar las colas de Windows Azure o las colas de bus de servicio para que los mensajes se muestren en un momento determinado. Sin embargo, no puede tener una tarea "para siempre" en una instancia de rol determinada, ya que periódicamente se reiniciarán las instancias de su máquina virtual (por ejemplo, para el mantenimiento del sistema operativo host todos los meses). Con los cierres de funciones, recibirá un aviso, que puede manejar estos avisos de cierre en Stopping() o OnStop(). Si tiene varias instancias, puede usar un planificador o una cola para asegurarse de que sus eventos aún se activen cada 50 segundos aproximadamente, y se manejen en varias instancias (pero solo por una instancia en un momento determinado).

Para conservar su información en la memoria, una idea es almacenar esa información en un caché. Tiene 2 opciones:

  • Servicio de caché distribuida (compartida), que existe desde hace un tiempo. Funciona independientemente de las instancias de tu rol.
  • Memoria caché en memoria, que se acaba de presentar en junio de 2012. Suponiendo que tiene más de una instancia, la memoria caché se distribuye en esas instancias. Incluso puede ejecutar el caché dentro de la memoria de sus roles existentes.

Más información sobre el almacenamiento en caché es here.

Hay algunas respuestas de StackOverflow con respecto a Quartz.net y Windows Azure, como this one.

1

Puede configurar un System.Threading.Timer para disparar cada 50 segundos más o menos, y haga su trabajo cada vez que ocurra el evento.

Cuestiones relacionadas