Używam mongodb jako usługi kolejki do wysyłania wiadomości e-mail. Wkrótce będzie działać w następujący sposób:
- Kiedy pojawia się nowa wiadomość, przechowuję ją w mongodb.
- Zadanie w tle ładuje następnie wiadomość z mongodb za pomocą atomowej operacji findAndModify i ustawia flagę
Processing
na true, więc nie przetwarza tej samej wiadomości dwa razy (ponieważ moje zadanie w tle uruchamia wiele wątków równolegle). - Po wysłaniu e-maila usuwam dokument z mongodb.
- Możesz także zachować liczbę niepowodzeń dla każdej wiadomości i usunąć ją po 3 nieudanych próbach.
Generalnie używam mongodb jako usługi kolejki tylko z jednego powodu:ponieważ muszę wysyłać e-maile zgodnie z określonym harmonogramem (każda wiadomość zawiera informację o godzinie, w której powinna zostać wysłana).
Jeśli nie masz żadnego harmonogramu i musisz natychmiast przetworzyć wiadomość, sugeruję, abyś zajrzał do istniejących usług kolejek, ponieważ prawdopodobnie obsługują one wszystkie przypadki, których możesz nie zobaczyć bez głębszego zrozumienia kolejek wiadomości.
Aktualizacja
Gdy zadanie w tle ulegnie awarii podczas przetwarzania wiadomości, możesz wykonać następujące czynności:
-
Przenieś tę wiadomość do innej, zbieranie błędów kolejki wiadomości lub...
-
Zwiększ licznik prób przetwarzania w wiadomości i ponownie nadaj status „Nowy”, aby spróbować ponownie ją przetworzyć. Tylko upewnij się, że zadanie w tle jest idempotentne (może przetwarzać tę samą wiadomość wiele razy i nie uszkadza danych) i transakcyjne (gdy zadanie się nie powiedzie, musisz cofnąć wprowadzone zmiany. Jeśli takie istnieją). Gdy zadanie nie powiedzie się po 5 próbach (wartość konfiguracji) wykonaj #1.
-
Po naprawieniu błędu w przetwarzaniu wiadomości można było przetworzyć ją ponownie, przypisując status „Nowy” i przechodząc do kolejki wiadomości, lub po prostu usunąć tę wiadomość. Właściwie zależy to od procesów biznesowych.