JS AWS SQS 不返回消息
JS AWS SQS not returning messages
我尝试从 SQS 队列(不是 FIFO)中提取消息,但它不起作用。我有一个 lambda 在 DynamoDB 中写入值,触发另一个 Lambda 创建 SQS 消息。然后我创建了一个具有 ReceiveMessage、GetQueueAttributes 和 DeleteMessage 权限的 Lambda 函数,并在 SQS 中添加了一个 "Trigger for Lambda Functions" 以授予对我的新 lambda 函数的权限。每当将条目添加到数据库时,都会触发我的最后一个 lambda 函数,因此触发器似乎可以正常工作。当我尝试使用 sqs.receivemessage(...) 获取条目时,它会等到 WaitTimeSeconds 时间段过去,然后我收到这样的答案:
{
"ResponseMetadata": {
"RequestId": "b1e34ce3-9003-5c00-a3d8-1ab75ba132b8"
}
}
很遗憾,没有添加消息对象。我还尝试将此调用包装在一个循环中,按照其他页面上的建议连续多次尝试,但不幸的是,他一直运行到超时为止,我没有收到消息。当 lambda 为 运行 时,我可以在 "Messages in the flight" 列表中看到消息。
我尝试修改超时、我调用函数的方式并在谷歌上搜索了很多,但不幸的是我仍然没有收到消息。
有什么想法吗?
这是我的代码:
'use strict';
var AWS = require("aws-sdk");
AWS.config.update({region: 'eu-central-1'});
var sqs = new AWS.SQS({apiVersion: '2012-11-05'});
exports.handler =(event, context, callback) => {
var params = {
QueueUrl: 'https://sqs.eu-central-1.amazonaws.com/476423085846/email',
AttributeNames: ['All'],
MaxNumberOfMessages: 5,
MessageAttributeNames: [
'email',
'hash'
],
WaitTimeSeconds: 10
};
sqs.receiveMessage(params, function(err, data) {
if (err)
{
console.log(err, err.stack); // an error occurred
}
else
{
console.info('DATA\n'+JSON.stringify(data));
}
}
}
我的 SQS 设置:
默认可见性超时:5 分钟,
消息保留期:4天,
最大消息大小:256kb(我的消息应该小得多),
交货延迟:0秒,
接收消息等待时间:10秒
提前致谢:)
问候克里斯蒂安
通过 AWS Lambda SQS 集成,AWS 会为您处理轮询 SQS 队列。 SQS 消息将位于传递给 Lambda 函数调用的 event
对象中。在这种情况下,您不应该直接调用 receiveMessage
。
我尝试从 SQS 队列(不是 FIFO)中提取消息,但它不起作用。我有一个 lambda 在 DynamoDB 中写入值,触发另一个 Lambda 创建 SQS 消息。然后我创建了一个具有 ReceiveMessage、GetQueueAttributes 和 DeleteMessage 权限的 Lambda 函数,并在 SQS 中添加了一个 "Trigger for Lambda Functions" 以授予对我的新 lambda 函数的权限。每当将条目添加到数据库时,都会触发我的最后一个 lambda 函数,因此触发器似乎可以正常工作。当我尝试使用 sqs.receivemessage(...) 获取条目时,它会等到 WaitTimeSeconds 时间段过去,然后我收到这样的答案:
{
"ResponseMetadata": {
"RequestId": "b1e34ce3-9003-5c00-a3d8-1ab75ba132b8"
}
}
很遗憾,没有添加消息对象。我还尝试将此调用包装在一个循环中,按照其他页面上的建议连续多次尝试,但不幸的是,他一直运行到超时为止,我没有收到消息。当 lambda 为 运行 时,我可以在 "Messages in the flight" 列表中看到消息。
我尝试修改超时、我调用函数的方式并在谷歌上搜索了很多,但不幸的是我仍然没有收到消息。
有什么想法吗?
这是我的代码:
'use strict';
var AWS = require("aws-sdk");
AWS.config.update({region: 'eu-central-1'});
var sqs = new AWS.SQS({apiVersion: '2012-11-05'});
exports.handler =(event, context, callback) => {
var params = {
QueueUrl: 'https://sqs.eu-central-1.amazonaws.com/476423085846/email',
AttributeNames: ['All'],
MaxNumberOfMessages: 5,
MessageAttributeNames: [
'email',
'hash'
],
WaitTimeSeconds: 10
};
sqs.receiveMessage(params, function(err, data) {
if (err)
{
console.log(err, err.stack); // an error occurred
}
else
{
console.info('DATA\n'+JSON.stringify(data));
}
}
}
我的 SQS 设置:
默认可见性超时:5 分钟, 消息保留期:4天, 最大消息大小:256kb(我的消息应该小得多), 交货延迟:0秒, 接收消息等待时间:10秒
提前致谢:)
问候克里斯蒂安
通过 AWS Lambda SQS 集成,AWS 会为您处理轮询 SQS 队列。 SQS 消息将位于传递给 Lambda 函数调用的 event
对象中。在这种情况下,您不应该直接调用 receiveMessage
。