MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB en tant que service de file d'attente ?

J'utilise mongodb comme service de file d'attente pour l'envoi d'e-mails. Bientôt, cela fonctionnera de la manière suivante :

  1. Lorsqu'un nouveau message arrive, je le stocke dans mongodb.
  2. Une tâche en arrière-plan charge ensuite le message de mongodb via l'opération atomique findAndModify et définit l'indicateur Processing à vrai, donc il ne traite pas le même message deux fois (parce que mon travail en arrière-plan exécute plusieurs threads en parallèle).
  3. Une fois l'e-mail envoyé, je supprime le document de mongodb.
  4. Vous pouvez également compter les échecs pour chaque message et le supprimer après 3 tentatives infructueuses.

En général, j'utilise mongodb comme service de file d'attente pour une seule raison :parce que j'ai besoin d'envoyer des e-mails selon un calendrier spécifié (chaque message contient des informations sur l'heure à laquelle il doit être envoyé).

Si vous n'avez pas de calendrier et que vous devez traiter les messages immédiatement, je vous suggère de consulter les services de file d'attente existants, car ils traitent probablement tous les cas que vous ne pouvez pas voir sans une compréhension plus approfondie des files d'attente de messages.

Mettre à jour

Lorsque la tâche en arrière-plan se bloque pendant le traitement des messages, vous pouvez procéder comme suit :

  1. Déplacez ce message vers un autre, collection d'erreurs de file d'attente de messages ou..

  2. Augmentez le compteur de tentatives de traitement dans un message et attribuez à nouveau le statut "Nouveau", pour essayer de le traiter à nouveau. Assurez-vous simplement que la tâche d'arrière-plan est idempotente (peut traiter le même message plusieurs fois et ne corrompt pas les données) et transactionnelle (lorsque la tâche échoue, vous devez annuler les modifications apportées, le cas échéant). Lorsque le travail échoue après 5 tentatives (valeur de configuration), effectuez #1.

  3. Une fois le bogue avec le traitement des messages corrigé, vous pouvez le traiter à nouveau en attribuant le statut "Nouveau" et en vous déplaçant vers la file d'attente des messages, ou simplement en supprimant ce message. Cela dépend en fait des processus métier.