sql >> Base de Datos >  >> NoSQL >> MongoDB

¿MongoDB como un servicio de cola?

Estoy usando mongodb como un servicio de cola para enviar correos electrónicos. Pronto funcionará de la siguiente manera:

  1. Cuando llega un nuevo mensaje, lo almaceno en mongodb.
  2. Un trabajo en segundo plano luego carga el mensaje de mongodb a través de la operación atómica findAndModify y establece el indicador Processing a verdadero, por lo que no procesa el mismo mensaje dos veces (porque mi trabajo en segundo plano ejecuta varios subprocesos en paralelo).
  3. Una vez que se ha enviado el correo electrónico, elimino el documento de mongodb.
  4. También puede llevar la cuenta de los errores de cada mensaje y eliminarlo después de 3 intentos fallidos.

En general, uso mongodb como un servicio de cola solo por una razón:porque necesito enviar correos electrónicos según un horario específico (cada mensaje contiene información sobre la hora a la que debe enviarse).

Si no tiene ningún cronograma y necesita procesar el mensaje de inmediato, le sugiero que busque en los servicios de colas existentes, porque probablemente manejen todos los casos que quizás no vea sin una comprensión más profunda de las colas de mensajes.

Actualizar

Cuando el trabajo en segundo plano falla durante el procesamiento de mensajes, puede hacer lo siguiente:

  1. Mover este mensaje a otro, colección de errores de cola de mensajes o...

  2. Aumente el contador de intentos de procesamiento en un mensaje y asigne nuevamente el estado "Nuevo", para intentar procesarlo nuevamente. Solo asegúrese de que el trabajo en segundo plano sea idempotente (puede procesar el mismo mensaje varias veces y no dañar los datos) y transaccional (cuando el trabajo falla, debe deshacer los cambios realizados, si corresponde). Cuando el trabajo falla después de 5 intentos (valor de configuración), realice el #1.

  3. Una vez que se solucionó el error con el procesamiento de mensajes, puede procesarlo nuevamente asignando el estado "Nuevo" y moviéndose a la cola de mensajes, o simplemente eliminando este mensaje. Depende de los procesos de negocio en realidad.