У меня есть программа для чтения файлов, которая сбрасывает каждую строку CSV в SQS;. Лямбда-функция .Net подписывается на получение каждой строки и индивидуальную ее обработку.
Когда элемент завершил обработку (около 1-3 секунд), он удаляется из очереди.
Один разпри обработке строки он отправляет пакет данных в другую область системы, но в журналах я вижу, что мы получаем дублированные пакеты данных из функции.
Из-за запуска лямбда-функцииодновременно;Моя теория работы состоит в том, что элементы очереди все еще находятся в полете, когда функция становится доступной для использования другого элемента - и поэтому она потребляет элемент, который уже обрабатывается.
Поскольку операция удаления выполняется в последний раз, мое решение состоит в том, чтобы переместить операцию удаления в начало функции.
Однако я беспокоюсь о том, разумно ли это, как будто функция зависает или истекает время ожидания при обработке, и мы собираемся полностью потерять пакет.Также, если я удалю элемент из очереди;Сможет ли функция продолжить работу после анализа данных из сообщения?
Итак, мой вопрос состоит из 2 частей
- Возможно ли, чтобы лямбда-функция, подписанная на SQS, получила сообщение в полете, в то время как другой экземпляр этой же функции уже обрабатывает его?
- Есть ли у меня потенциальные проблемы с удалением элемента очереди, как только функция его подняла