> Если из обработчика в лямбде (в С#) выбросить исключение, то это будет воспринято (кем?), как просьба ещё раз отправить эти же сообщения, эту пачку, за исключением тех, что были явно удалены в ходе выполнения кода лямбды. Если же исключения не было, то сообщения будут удалены (кем?)
Все зависит от retry policy (aka visibility timeout в мире sqs) + redrive policy (aka конфигурации dead-letter queue). Но это все детали реализации SQS о которых консьюмер вообще ничего не должен знать. Так же как консьюмер не должен ничего знать о существовании других консьюмеров.
Задача консьюмера принять сообщение, сделать dedup и выполнить работу. Если вдруг нужны distributed locks (а если у вас очереди, то они не нужны т.к. есть более подходящие инструменты), то лучше попытаться поставить лок и в случае, если лок уже стоит, вместо exception имеет смысл вернуть сообщение руками в конец очереди:
if !aquitedLock { enqueueMessage(); return } if dedup ( return }
Или использовать FIFO queues (и там миллион своих приколов)
> Я не могу найти ответа в документации AWS.
https://docs.aws.amazon.com/lambda/latest/operatorguide/sqs-retries.html