У меня есть следующий код в лямбда-выражении для получения сообщений SQS: Когда я вставляю сообщение в SQS, лямбда-триггер срабатывает, но говорит, что data.Messages имеет значение null.
function receiveMessages(callback)
{
var params = {
QueueUrl: TASK_QUEUE_URL,
MaxNumberOfMessages: 2,
WaitTimeSeconds: 1,
AttributeNames: ["All"]
};
SQS.receiveMessage(params, function(err, data)
{
if (err)
{
console.error(err, err.stack);
callback(err);
}
else if (data.Messages == null)
{
console.info("null message", data);
callback(null,null);
}
else
{
callback(null, data.Messages);
}
});
}Не очевидно, что я делаю неправильно. Я пробовал как очередь, так и очередь без ФИФО
Как вызывается ваша лямбда-функция? Я предполагаю, что вы не использование очереди как источника событий, потому что это работает только с не-fifo ... но если бы вы были, сообщения уже находятся внутри event - вы бы не использовали receiveMessages().
Действительно ли в очереди есть сообщения? То, что вы описываете, звучит как правильное поведение, если очередь пуста.
@ Michael-sqlbot, спасибо - это действительно была проблема. Я использовал очередь в качестве источника событий, а затем выполнял для нее метод receivemessage (), который не нужен. я





Когда использование очереди SQS в качестве источника лямбда-событий, компонент службы Lambda фактически опрашивает очередь и передает полезные данные сообщения вызову функции в массиве event.Records, который будет содержать одно или несколько сообщений из очереди. Сообщения временно не видны в очереди (они «в полете»).
Вам не нужно напрямую взаимодействовать с SQS в этом приложении.
Вы обрабатываете сообщения и успешно выходите из функции Lambda, и все сообщения, только что переданные вам, автоматически удаляются из очереди опросчиком Lambda.
Если генерируется исключение, все сообщения, которые вы только что передали, снова становятся видимыми в очереди.
Пожалуйста, обратитесь к docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/…