У меня есть сервис-приложение, которое использует Amazon SQS с несколькими очередями и несколькими потребителями. Я делаю это так, чтобы я мог реализовать архитектуру на основе событий и отделить все сервисы, где разные службы реагируют на изменения состояния других систем. Например:Использование Amazon SQS с несколькими потребителями
- регистрационная служба:
- эмитирует события «регистрация новой», когда новый пользователь регистрируется.
- Услуги Пользователь:
- Издает событие 'пользователь обновляемый', когда пользователь обновляется.
- Служба поиска:
- Считывает из очереди 'учетно-новый' и индексы пользователей в поиске.
- Считывает из очереди «обновленный пользователь» и обновляет пользователя в поиске.
- Метрики Сервис:
- Считывает из 'учетно-новой' очереди и посылает Mixpanel.
- Считывается из очереди «обновляется пользователем» и отправляется в Mixpanel.
У меня ряд вопросов:
- Сообщение может быть получены несколько раз при выполнении опроса. Я могу создать много систем, чтобы быть идемпотентными, но для некоторых сервисов (таких как служба показателей), которые были бы намного сложнее.
- Сообщение должно быть удалено вручную из очереди в SQS. Я подумал о внедрении «службы обработки сообщений», которая обрабатывает удаление сообщений, когда все службы получили их (каждая служба будет выдавать сообщение «подтвержденное сообщением» после обработки сообщения).
Я думаю, мой вопрос таков: какие шаблоны я должен использовать, чтобы гарантировать, что у меня может быть несколько потребителей для одной очереди в SQS, гарантируя, что сообщения также будут надежно доставлены и удалены. Спасибо за помощь.
Это идеальное решение. Я не знал, что вы можете сделать это с SNS! Спасибо! – user2205763