Jeg bruger mongodb som en køtjeneste til afsendelse af e-mail. Det vil snart fungere på følgende måde:
- Når en ny besked kommer, gemmer jeg den i mongodb.
- Et baggrundsjob indlæser derefter beskeden fra mongodb via atomoperationen findAndModify og sætter flaget
Processing
til sand, så den behandler ikke den samme besked to gange (fordi mit baggrundsjob kører flere tråde parallelt). - Når e-mailen er blevet sendt, fjerner jeg dokumentet fra mongodb.
- Du kan også holde optællingen af fejlene for hver besked og fjerne den efter 3 mislykkede forsøg.
Generelt bruger jeg mongodb som en køtjeneste kun af én grund:fordi jeg skal sende e-mails efter specificeret tidsplan (hver besked indeholder information om, hvornår den skal sendes).
Hvis du ikke har nogen tidsplan og skal behandle besked med det samme, foreslår jeg, at du kigger på eksisterende køtjenester, for de håndterer sandsynligvis alle sager, som du måske ikke ser uden en dybere forståelse af beskedkøer.
Opdater
Når baggrundsjob går ned under meddelelsesbehandling, kan du gøre følgende:
-
Flyt denne meddelelse til en anden, indsamling af meddelelseskøfejl eller..
-
Øg tælleren for behandlingsforsøg i en besked og tildel igen status "Ny", for at prøve at behandle den igen. Bare sørg for, at baggrundsjobbet er idempotent (kan behandle den samme besked flere gange og ikke korrupte data) og transaktionsbestemt (når jobbet mislykkes, skal du fortryde ændringer, der blev foretaget, hvis nogen). Når jobbet mislykkes efter 5 forsøg (konfigurationsværdi), udfør #1.
-
Når fejlen med meddelelsesbehandling var rettet, kunne du behandle den igen ved at tildele "Ny" status og flytte til meddelelseskøen, eller bare slette denne meddelelse. Det afhænger faktisk af forretningsprocesser.