Я использую mongodb в качестве службы очереди для отправки электронной почты.Вскоре он будет работать следующим образом:
- Когда приходит новое сообщение, я сохраняю его в mongodb.
- Фоновое задание затем загружает сообщение из mongodb через атомарную операцию findAndModify и устанавливает флаг
Processing
в значение true, поэтому он не обрабатывает одно и то же сообщение дважды (поскольку мое фоновое задание запускает несколько потоков параллельно). - После отправки сообщения электронной почты я удаляюдокумент из mongodb.
- Вы также можете вести подсчет сбоев для каждого сообщения и удалять его после 3 неудачных попыток.
В общем случае я использую mongodb в качестве службы очереди только для одногопричина: потому что мне нужно отправлять электронные письма по указанному расписанию (каждое сообщение содержит информацию о том, в какое время оно должно быть отправлено).
Если у вас нет расписания и вам нужно немедленно обработать сообщение, я предлагаю вам посмотретьв существующие службы очередей , потому что они, вероятно, обрабатывают все случаи, которые вы можете не увидеть без более глубокого понимания беспорядкавозрастные очереди.
Обновление
Если во время обработки сообщения происходит сбой фонового задания, вы можете выполнить следующее:
Переместить это сообщение в другое, сборник ошибок очереди сообщений или ..
Увеличьте счетчик попыток обработки в сообщении и снова присвойте статус «Новый», чтобы попытаться обработать его снова.Просто убедитесь, что фоновое задание является идемпотентным (может обрабатывать одно и то же сообщение несколько раз и не повреждать данные) и транзакционным (при сбое задания вы должны отменить изменения, которые были внесены. Если таковые имеются).Если после 5 попыток не удается выполнить задание (значение конфигурации), выполните # 1.
Как только ошибка с обработкой сообщений была исправлена, вы можете обработать ее еще раз, присвоив статус «Новый» и перейдя кочереди сообщений, или просто удалите это сообщение.Это зависит от бизнес-процессов на самом деле.