Вопрос по AWS.
Очередь сообщений SQS может иметь триггер для лямбды. Этот триггер запускает лямбду и передаёт ей событие с пачкой вычитанных из очереди сообщений.
Если из обработчика в лямбде (в С#) выбросить исключение, то это будет воспринято (кем?), как просьба ещё раз отправить эти же сообщения, эту пачку, за исключением тех, что были явно удалены в ходе выполнения кода лямбды. Если же исключения не было, то сообщения будут удалены (кем?)
Сам характер AWS Lambda подразумевает возможность случайного запуска двух лямбд вместо одной. То есть триггер сработал, создал событие, запустил лямбду с этим событием, а запустилось два процесса. Это редкость, но такое возможно.
Если я делаю некую распределенную блокировку по набору сообщений из события, чтобы не обрабатывать два раза одну и ту же пачку, то возникает вопрос: что делать, если я вижу неудачную попытку захвата блокировки? То есть, если первый процесс лямбды получил пачку сообщений, захватил блокировку, начал их обрабатывать. И тут же второй процесс той же самой лямбды получил ту же самую пачку, но захват блокировки оказался неудачным. Нужно ли при неудаче выбрасывать исключение? Ведь если его не выбросить, то нечто неизвестное(кто?), что может реагировать на исключение, оно посчитает что события обработаны, и удалит их. А это неверно, ведь они обрабатываются в другом процессе, и результат обработки ещё неизвестен. Может быть их нужно будет ещё раз получить и попытаться обработать через некоторое время.
Я не могу найти ответа в документации AWS.