Pregunta

Quiero iniciar alguna tarea que se conectará a un IMAP y traer datos de correo electrónico para almacenarlos en la base de datos.

Ahora ese trabajo tendría un volumen enorme para soportar a muchos IMAP cuentas.Quiero aprovechar las capacidades del clúster Akka, que pueden ejecutar estos trabajos en un conjunto predefinido de máquinas en una red y realizar nuevos intentos en caso de errores mientras obtengo datos de IMAP Hospedadores.

Quiero crear un clúster akka que se active IMAP buscar trabajo (a través de un actor?!!).

IMAP Es un protocolo complicado y es posible que no se pueda conectar al host remoto.En tal caso, un actor debe reintentar varias veces configurables para conectarse y recuperar.

Eventualmente debería actuar como mi IMAP buscar el extremo trasero.

¿Cómo debo hacerlo?

¿Fue útil?

Solución

Usamos Akka en gran medida, incluso para conectarnos y procesar nuevos mensajes de las cuentas de correo electrónico de los usuarios usando JavaMail/IMAP.La tolerancia a fallos es una parte importante del rompecabezas.Así es aproximadamente cómo está configurado nuestro backend:

  1. El nodo supervisor tiene un actor que selecciona usuarios de la base de datos para su procesamiento
  2. Los actores trabajadores IMAP notifican al supervisor cuando están listos para trabajar (para obtener más información sobre esta arquitectura de "tracción de trabajo", consulte la publicación del blog de mi colega Ryan Tanner: http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5-the-importance-of-pulling)
  3. Supervisor envía un mensaje ProcessAccount (un objeto personalizado que incluye un token OAuth de Gmail (también puede usar credenciales de nombre de usuario y contraseña tradicionales)) al trabajador IMAP inactivo.
  4. El trabajador IMAP utiliza JavaMail para leer y procesar mensajes nuevos.En caso de error, envía un mensaje de procesamiento fallido (un objeto personalizado que incluye un código de error y una cadena legible por humanos) al actor supervisor.Si tiene éxito, envía CompletedProcessing.
  5. El supervisor actualiza el registro de usuario en la base de datos, incluida la configuración de un código de error si falla el procesamiento.
  6. Además de procesar periódicamente cuentas sanas, el supervisor vuelve a intentar procesar cuentas fallidas.Nuestro caso de uso es tal que solo intentamos reprocesar una vez al día, pero podría hacerlo con mucha más frecuencia.

Al utilizar la agrupación en clústeres de Akka, mantenemos a los trabajadores separados del supervisor.La combinación de este enfoque con el mecanismo de extracción de trabajo descrito anteriormente nos mantiene relativamente tolerantes a errores irrecuperables, p.OutOfMemoryErrors, en los trabajadores.

Otros consejos

Utilice JavaMail.Leer el Preguntas frecuentes sobre JavaMail.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top