У меня странная проблема (возможно, это связано с тем, что я просто не понимаю некоторые тонкости SQS), когда я отправляю 62 сообщения в очередь, получаю действительные MessageId
назад от AWS, но некоторые из этих сообщений(~ 5%) никогда не добирается до моей лямбды.
Мой код очереди выглядит так:
let data = await sqs.sendMessageBatch(params).promise();
console.log(`Queued ${data.Successful.length} records`);
if(data.Failed.length > 0){
console.log(`ERROR not all messages were properly queued. `, data);
}
data.Successful.forEach(m => console.log(`MessageId=${m.MessageId}`));
В каждом случае каждое сообщение успешно, и этот код выводит MessageId
.Обычный сценарий - отправка пакетов по 10 записей (максимально sendMessageBatch
), и весь пакет пропадает.Итак, из 62 записей 10 отсутствуют или 2 отсутствуют.
Lambda берет каждое из этих сообщений и вставляет строку в базу данных, поэтому довольно легко сказать, что сообщения отсутствуют.Насколько я знаю, нет способа найти сообщение SQS по его идентификатору, поэтому, хотя у меня есть этот идентификатор, я ничего не могу с ним поделать.
У меня довольно обширная регистрация и поискчерез журналы я могу сказать, что ни один экземпляр Lambda никогда не получал эти пропущенные сообщения.Я могу сосчитать все остальные моменты, когда Lambda запускалась и обрабатывала запись, но это всегда 50 или 52 вместо 62 раз.
Куда идут мои сообщения?