向 sqs 发送消息不起作用,我没有看到任何错误,但消息没有发送到 SQS。 我正在尝试使用本地 lambda 来运行它。
var AWS = require('aws-sdk');
AWS.config.update({
accessKeyId: process.env.DEV_AWS_ACCESS_KEY,
secretAccessKey: process.env.DEV_AWS_SECRET_KEY,
region: process.env.DEV_AWS_REGION
});
var sqs = new AWS.SQS({apiVersion: '2012-11-05'});
async function pushToSQS(executed_report_id, report_id, filebatchKey) {
try {
const data = {
executed: "YES",
id: r_id,
batch_key: key
}
var params = {
MessageBody: JSON.stringify({data}),
QueueUrl: process.env.DEV_AWS_QUEUE_URL,
DelaySeconds: 0
};
await sqs.sendMessage(params, function(err, data) {
if (err) {
console.log('SQS Error', err)
throw err
return
}
console.log("Successfully Sent the data message to SQS", data.MessageId);
});
} catch (error) {
console.log(error);
throw error;
}
}
当我尝试构建业务逻辑时,我从另一个函数调用此函数。它不会直接从
index.js
(主处理程序) 调用
为什么它不起作用,我的意思是它必须起作用,不会抛出任何错误。我还尝试使用 local-lambda
在本地运行 lambda注意 - AWS 密钥和秘密拥有对 SQS 的完全访问权限。
调用
sqs.sendMessage
不会启动操作。它也不会返回承诺,而是返回一个 AWS.Request
对象,因此那里的 await
不会执行任何操作。
为了真正启动异步操作并获得承诺,您的调用应该是
sqs.sendMessage(params).promise()
。
这在整个
aws-sdk
都是如此,而不仅仅是在 SQS API 中。
我刚刚遇到过这样的情况,我正在调用一个标准队列,并在请求中使用消息重复数据删除 ID。发送到队列的调用返回 OK,但什么也没发生。
从 SendMessageRequest 对象中删除 MessageGroupId 和 MessageDeduplicationId 解决了该问题。