Използвам mongodb като услуга за опашка за изпращане на имейли. Скоро ще работи по следния начин:
- Когато дойде ново съобщение, го съхранявам в mongodb.
- След това фоново задание зарежда съобщението от mongodb чрез атомарната операция findAndModify и задава флага
Processing
на true, така че не обработва едно и също съобщение два пъти (тъй като моята фонова работа изпълнява няколко нишки паралелно). - След като имейлът бъде изпратен, премахвам документа от mongodb.
- Можете също да отброите неуспехите за всяко съобщение и да го премахнете след 3 неуспешни опита.
По принцип използвам mongodb като услуга за опашка само поради една причина:защото трябва да изпращам имейли по определен график (всяко съобщение съдържа информация за това в колко часа трябва да бъде изпратено).
Ако нямате график и трябва незабавно да обработите съобщението, предлагам да разгледате съществуващите услуги за опашка, защото те вероятно обработват всички случаи, които може да не видите без по-задълбочено разбиране на опашките за съобщения.
Актуализиране
Когато фоновата задача се срине по време на обработката на съобщението, можете да направите следното:
-
Преместете това съобщение в друго, събиране на грешки в опашката на съобщения или...
-
Увеличете брояча на опитите за обработка в съобщението и отново задайте статус "Нов", за да опитате да го обработите отново. Просто се уверете, че фоновата задача е идемпотентна (може да обработва едно и също съобщение няколко пъти и да не повреди данни) и транзакционна (когато заданието се провали, трябва да отмените направените промени. ако има такива). Когато заданието се провали след 5 опита (конфигурационна стойност), изпълнете #1.
-
След като грешката с обработката на съобщенията бъде отстранена, можете да я обработите отново, като зададете статус „Ново“ и се преместите в опашката за съобщения или просто изтриете това съобщение. Всъщност зависи от бизнес процесите.