MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB als Warteschlangendienst?

Ich verwende mongodb als Warteschlangendienst für den E-Mail-Versand. Bald wird es folgendermaßen funktionieren:

  1. Wenn eine neue Nachricht kommt, speichere ich sie in der mongodb.
  2. Ein Hintergrundjob lädt dann die Nachricht von mongodb über die atomare Operation findAndModify und setzt das Flag Processing auf true, damit dieselbe Nachricht nicht zweimal verarbeitet wird (weil mein Hintergrundjob mehrere Threads parallel ausführt).
  3. Sobald die E-Mail gesendet wurde, entferne ich das Dokument aus mongodb.
  4. Sie können auch die Fehler für jede Nachricht zählen und sie nach 3 fehlgeschlagenen Versuchen entfernen.

Im Allgemeinen verwende ich mongodb als Warteschlangendienst nur aus einem Grund:weil ich E-Mails nach einem bestimmten Zeitplan senden muss (jede Nachricht enthält Informationen darüber, wann sie gesendet werden soll).

Wenn Sie keinen Zeitplan haben und Nachrichten sofort verarbeiten müssen, schlage ich vor, dass Sie sich mit vorhandenen Warteschlangendiensten befassen, da diese wahrscheinlich alle Fälle behandeln, die Sie ohne ein tieferes Verständnis von Nachrichtenwarteschlangen möglicherweise nicht sehen.

Aktualisieren

Wenn der Hintergrundjob während der Nachrichtenverarbeitung abstürzt, können Sie Folgendes tun:

  1. Verschieben Sie diese Nachricht in eine andere Sammlung von Fehlern in der Nachrichtenwarteschlange oder..

  2. Erhöhen Sie den Verarbeitungsversuchszähler in einer Nachricht und weisen Sie erneut den Status "Neu" zu, um die Verarbeitung erneut zu versuchen. Stellen Sie einfach sicher, dass der Hintergrundjob idempotent (kann dieselbe Nachricht mehrmals verarbeiten und keine Daten beschädigen) und transaktional ist (wenn der Job fehlschlägt, müssen Sie vorgenommene Änderungen rückgängig machen, falls vorhanden). Wenn der Job nach 5 Versuchen fehlschlägt (Konfigurationswert), führe #1 aus.

  3. Sobald der Fehler bei der Nachrichtenverarbeitung behoben wurde, können Sie ihn erneut verarbeiten, indem Sie den Status "Neu" zuweisen und in die Nachrichtenwarteschlange verschieben, oder diese Nachricht einfach löschen. Es hängt tatsächlich von den Geschäftsprozessen ab.