У меня есть приложение на основе сервисов, которое использует Amazon SQS с несколькими очередями и несколькими потребителями. Я делаю это так, чтобы я мог реализовать архитектуру на основе событий и отделить все сервисы, где разные службы реагируют на изменения состояния других систем. Например:
- Служба регистрации:
- Выдает событие "registration-new", когда регистрируется новый пользователь.
- Служба пользователя.
- При обновлении пользователя обновляется событие "обновлено пользователем".
- Служба поиска:
- Считывает из очереди 'registration-new' и индексирует пользователя в поиске.
- Считывает из очереди "обновляемый пользователем" и обновляет пользователя в поиске.
- Сервис показателей.
- Считывается из очереди 'registration-new' и отправляется в Mixpanel.
- Считывается из очереди "обновляется пользователем" и отправляется в Mixpanel.
У меня возникает ряд проблем:
- При проведении опроса сообщение может быть получено несколько раз. Я могу создать много систем, чтобы быть идемпотентными, но для некоторых сервисов (таких как служба показателей) было бы намного сложнее.
- Сообщение должно быть удалено вручную из очереди в SQS. Я думал о внедрении "службы обработки сообщений", которая обрабатывает удаление сообщений, когда все службы получили их (каждая служба будет выдавать сообщение "подтвержденное сообщением" после обработки сообщения).
Я предполагаю, что мой вопрос таков: какие шаблоны я должен использовать, чтобы гарантировать, что у меня может быть несколько потребителей для одной очереди в SQS, гарантируя, что сообщения также будут надежно доставлены и удалены. Благодарим вас за помощь.