Jag använder mongodb som en kötjänst för att skicka e-post. Snart kommer det att fungera på följande sätt:
- När ett nytt meddelande kommer lagrar jag det i mongodb.
- Ett bakgrundsjobb laddar sedan meddelandet från mongodb via atomoperationen findAndModify och ställer in flaggan
Processing
till sant, så det behandlar inte samma meddelande två gånger (eftersom mitt bakgrundsjobb kör flera trådar parallellt). - När mejlet har skickats tar jag bort dokumentet från mongodb.
- Du kan också hålla räkningen av felen för varje meddelande och ta bort det efter tre misslyckade försök.
I allmänhet använder jag mongodb som en kötjänst endast av en anledning:för att jag behöver skicka e-postmeddelanden enligt specificerat schema (varje meddelande innehåller information om vilken tid det ska skickas).
Om du inte har något schema och behöver behandla meddelanden omedelbart föreslår jag att du tittar på befintliga kötjänster, eftersom de förmodligen hanterar alla ärenden som du kanske inte ser utan en djupare förståelse för meddelandeköer.
Uppdatera
När bakgrundsjobb kraschar under meddelandebearbetning kan du göra följande:
-
Flytta detta meddelande till ett annat, insamling av meddelandeköfel eller...
-
Öka räknaren för bearbetningsförsök i ett meddelande och tilldela statusen "Ny" igen för att försöka bearbeta det igen. Se bara till att bakgrundsjobbet är idempotent (kan behandla samma meddelande flera gånger och inte korrupta data) och transaktionsmässigt (när jobbet misslyckas måste du ångra ändringar som gjordes. om några). När jobbet misslyckas efter 5 försök (konfigurationsvärde) utför #1.
-
När en bugg med meddelandebehandling var åtgärdad kunde du bearbeta den igen genom att tilldela "Ny" status och flytta till meddelandekön, eller bara ta bort det här meddelandet. Det beror på affärsprocesser faktiskt.