Я пытаюсь спроектировать небольшую систему обработки сообщений на основе SQS, Lambda и SNS.В случае неудачи я бы хотел, чтобы сообщение было помещено в очередь в очереди недоставленных сообщений (DLQ) и чтобы был вызван веб-крюк.
Я бы хотел знать, как бы выглядел наиболее канонический или разумный способ достижения этого.
В настоящее время, если все идет хорошо, процесс должен быть следующим:
- SQS (на месте для обработки повторов) ставит в очередь сообщение
- Lambda вызывается SQS и обрабатывает сообщение
- Lambda отправляет веб-крючок и нормально завершает
Если что-то в лямбде идет не так (успех webhook не может быть вызван, задача под рукой не может быть обработана), проще всего добиться того, чего я хочу, - настроить DLQ1, в который SQS будет помещать сообщения о сбоях.Затем будет вызвана вспомогательная лямбда для обработки этого сообщения, передачи его в SNS, который вызовет webhook с ошибкой, а также пересылки сообщения в DLQ2, окончательный / истинный DLQ.
Это лучший подход?
Одна из известных мне альтернатив - Аварии , хотя меня предупреждали, что они довольно хитры.Еще один способ - заставить лямбду вызывать webhook, сообщающий об ошибках, если во время последней попытки произошел сбой, хотя это как-то неуместно.
Спасибо!