【问题标题】:JS AWS SQS not returning messagesJS AWS SQS 不返回消息
【发布时间】:2020-03-20 03:38:42
【问题描述】:

我尝试从 SQS 队列(不是 FIFO)中提取消息,但它不起作用。我有一个 Lambda 在 DynamoDB 中写入一个值,触发另一个 Lambda 创建 SQS 消息。然后,我创建了一个具有 ReceiveMessage、GetQueueAttributes 和 DeleteMessage 权限的 Lambda 函数,并在 SQS 中添加了一个“Lambda 函数触发器”,授予我的新 lambda 函数权限。每当将条目添加到数据库时,都会触发我的最后一个 lambda 函数,因此触发器似乎可以工作。当我尝试使用 sqs.receivemessage(...) 获取条目时,它会等到 WaitTimeSeconds 周期过去,然后我会收到这样的答案:

{
"ResponseMetadata": {
    "RequestId": "b1e34ce3-9003-5c00-a3d8-1ab75ba132b8"
    }
}

很遗憾,没有添加 Message 对象。我还尝试将这个调用包装在一个循环中,以便按照其他页面上的建议连续尝试几次,但不幸的是,他一直运行到超时,而我没有收到消息。当 lambda 运行时,我可以在“飞行中的消息”列表中看到该消息。

我尝试修改超时,调用函数的方式并搜索了很多,但不幸的是我仍然没有收到任何消息。

有什么想法吗?

这是我的代码:

'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秒

提前致谢:)

问候克里斯蒂安

【问题讨论】:

    标签: javascript amazon-web-services aws-lambda amazon-sqs


    【解决方案1】:

    借助 AWS Lambda SQS 集成,AWS 会为您处理轮询 SQS 队列。 SQS 消息将位于传递给 Lambda 函数调用的 event 对象中。在这种情况下,您不应该直接调用 receiveMessage

    【讨论】:

    • 这似乎无法回答问题。我知道 Lambda 触发器存在,但为什么 receiveMessage 在 Lambda 中不起作用(不是触发器)。
    • @piisexactly3 该问题明确指出,他们“添加了一个“Lambda 函数触发器”,并且在 Lambda 函数调用 receiveMessage 时消息已经“进行中”。这清楚地表明用户正在尝试使用 Lambda SQS 触发器和直接 SQS API 调用的组合,我的回答解释为不正确的配置。如果您尝试在没有内置 Lambda 触发器的情况下在 Lambda 中使用 SQS,那么这是一个单独的问题你应该把它作为一个单独的问题发布在 StackOverflow 上。
    • 很公平。反对意见被撤回。
    • 这完全回答了我的问题,在receiveMessage 中挖掘太久之后。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2021-03-22
    • 2017-05-29
    • 2019-11-11
    相关资源
    最近更新 更多