2010-04-23 29 views
7

Actualmente estoy usando Quartz Scheduler para tareas asíncronas, como enviar un correo electrónico cuando ocurre una excepción, enviar un correo electrónico desde la interfaz web o analizar el tráfico periódicamente.Message Queue o Scheduler

¿Debo usar una cola de mensajes para enviar un correo electrónico? ¿Es más eficiente o correcto hacerlo de esa manera? El enfoque del programador funciona bien.

Si uso una cola y no se pudo enviar el correo electrónico, ¿es posible que la cola vuelva a intentar enviar el correo electrónico más adelante? El enfoque de cola parece más simple que el programador para las tareas que deben suceder inmediatamente, pero para las tareas del planificador, el planificador sigue siendo, a menos que haya más en la cola de lo que estoy consciente.

Todavía no he usado JMS, así que esto es lo que he leído.

Walter

Respuesta

2

Son muy diferentes y depende del propósito y la frecuencia a la que desea enviar un correo electrónico. El programador genera un evento que se basa en el tiempo y luego ejecuta algún código para enviar un correo electrónico. Una cola no tiene forma de desencadenar un evento, necesita que se le envíe un mensaje desde algún lugar y luego un MessageListener le envíe un correo electrónico.

Para responder a su pregunta una cola es un buen instrumento para enviar un correo electrónico si necesita ser puesto de nuevo en la cola si la operación falla,

  1. El mensaje a pesar de que SMTP no sabe si el correo electrónico llegó a su destino.
  2. Algunos activadores pueden poner un mensaje en en la cola.

El programador puede ejecutar algunos códigos Java en un determinado intervalo y, por lo tanto, genera eventos temporales. Si desea enviar correos electrónicos periódicos, entonces el planificador es el camino a seguir.

Si va con el planificador, entonces debe hacer que el planificador coloque un mensaje en una cola. Si no es así, debe tener otro activador para poner un mensaje en la cola.

+0

Romain - eso suena bien. Acepté tu comentario porque es un poco más descriptivo. Creo que iré con una cola entonces. Si no se envía el correo electrónico, mi modo de falla sería intentar otro tipo de notificación. –

+1

@Walter White El correo electrónico no es un sistema de entrega garantizado. Si debe entregar este correo electrónico, tiene varias opciones. 1) Publique en su sitio web y permita que la persona inicie sesión y vea las actualizaciones de su cuenta. 2) Ponga una URL en su correo electrónico para que hagan clic si recibieron el correo, si no continúan enviando de manera periódica. Todavía no está garantizado, solo sabes cuando lo obtuviste. 3) Enviar una carta con el correo electrónico (Digamos que es información de la cuenta de un banco) La carta se puede registrar si es necesario. 2) –

+0

De hecho, encuentro que usar un programador como Quartz es una buena opción para esto; cuando se usan persistentes, sobrevivirán a cierres, y hay un mecanismo de reintento natural integrado. – Eelco

2

Una cola sería una opción más natural para el envío de cosas como el correo electrónico. El cuarzo puede ser con cuernos para el calzado, pero no es un ajuste natural cuando cosas como volver a intentarlo. Un programador es más adecuado para exactamente lo que su nombre sugiere, tareas que se supone que ocurren periódicamente.

+0

No estoy de acuerdo con la idea de que un programador sea solo para tareas que ocurren periódicamente. En mi opinión, no hay nada de malo en usarlo para casos únicos. Si usa trabajos persistentes con Quartz, sobrevivirá a cierres y trabajará en un clúster, y puede marcar fácilmente un trabajo para su re ejecución cuando falla. Ver http://bit.ly/eiSkRS – Eelco

1

Estoy de acuerdo con Tom en que tal comunicación asíncrona se realiza mejor a través de la cola. Que funciona como un modelo de publicación de abonados siguiendo el patrón del observador.

Cuestiones relacionadas