2017-01-13 4 views
3

У меня есть прецедент, где мне нужна служба Amazon SNS для отправки уведомления, пока мое приложение (давайте назовем его APP) не получило его, но в документации говорится, что максимальный срок службы сообщения может составлять 1 час ,Срок службы сообщений AWS SNS

Предположим, что APP падает, и это невозможно, чтобы получить его вживую через 1 час. Мне все равно нужно как-то получать эти сообщения.

Есть несколько способов реализации его:

  1. APP опросы от SQS. Мне не нравится этот параметр, потому что он создает слишком много сетевого трафика между APP и AWS.
  2. SNS отправляет уведомление обоим: APP и SQS. Если APP сможет получить сообщение, он немедленно удалит его из SQS. Если APP не может получить сообщение (разбился), он может загружать сообщения из SQS при запуске и очищать очередь.
  3. AWS Лямбда-код как служба обмена сообщениями. Если код Lambda не работает, он может отправить сообщение в очередь SQS Dead Letter Queue, в противном случае будет оставаться чистой. Обработка обновлений кода Lamba слишком велик, было бы здорово решить эту проблему с помощью чистого AWS, если это возможно.

Идеальное решение для установки бесконечного таймаута для сообщения SNS, но похоже, что Amazon не поддерживает его.

Как вы думаете, а лучше всего решить эту проблему? Я что-то пропустил?

+0

Если вы хотите положиться на решение, отличное от aws, вы можете использовать плагин pubnub w/message history (retention). – hjpotter92

+0

Спасибо hjpotter92. Поскольку это высокозащищенное решение, я предпочитаю не отправлять какие-либо данные третьим лицам, кроме Amazon. –

ответ

3

Одним из вариантов может быть предоставление SNS сообщений на Лямбду, вызывающую ваше приложение. Если Lambda не может доставить сообщение в ваше приложение, выполните сбой, чтобы SNS повторил Lambda. Затем вы можете настроить свою Лямбду с помощью очереди с мертвой буквой (SQS), чтобы, если она терпит неудачу слишком много раз, сообщение отправляется в очередь. Наконец, вы можете запустить другую Lambda по расписанию, которая проверяет очередь мертвой буквы и повторяет вызов Lambda. Он просто оставил бы сообщение обратно в очередь мертвых букв, если он потерпит неудачу.

Таким образом, если ваше приложение доступно, сообщение будет доставлено немедленно. Если приложение недоступно, оно будет повторять поставку позже.

Смежные вопросы