Ik gebruik mongodb als wachtrijservice voor het verzenden van e-mail. Binnenkort zal het op de volgende manier werken:
- Als er een nieuw bericht komt, sla ik het op in de mongodb.
- Een achtergrondtaak laadt vervolgens het bericht van mongodb via de atomaire bewerking findAndModify en stelt de vlag in
Processing
naar true, zodat het hetzelfde bericht niet twee keer verwerkt (omdat mijn achtergrondtaak meerdere threads parallel uitvoert). - Zodra de e-mail is verzonden, verwijder ik het document van mongodb.
- Je kunt ook het aantal fouten voor elk bericht bijhouden en het na 3 mislukte pogingen verwijderen.
Over het algemeen gebruik ik mongodb maar om één reden als wachtrijservice:omdat ik e-mails moet verzenden volgens een bepaald schema (elk bericht bevat informatie over hoe laat het moet worden verzonden).
Als je geen schema hebt en berichten onmiddellijk moet verwerken, raad ik je aan om naar bestaande wachtrijservices te kijken, omdat ze waarschijnlijk alle gevallen behandelen die je misschien niet ziet zonder een dieper begrip van berichtenwachtrijen.
Bijwerken
Als de achtergrondtaak crasht tijdens het verwerken van berichten, kunt u het volgende doen:
-
Verplaats dit bericht naar een ander bericht, verzameling van fouten in de berichtenwachtrij of..
-
Verhoog de teller van verwerkingspogingen in een bericht en wijs opnieuw de status "Nieuw" toe om het opnieuw te proberen. Zorg er gewoon voor dat de achtergrondtaak idempotent is (kan hetzelfde bericht meerdere keren verwerken en geen corrupte gegevens) en transactioneel (wanneer de taak mislukt, moet u eventuele aangebrachte wijzigingen ongedaan maken). Als de taak mislukt na 5 pogingen (configuratiewaarde), voer dan #1 uit.
-
Nadat de bug met de berichtverwerking was opgelost, kunt u deze opnieuw verwerken door de status "Nieuw" toe te wijzen en naar de berichtenwachtrij te gaan, of u kunt dit bericht gewoon verwijderen. Het hangt eigenlijk af van bedrijfsprocessen.