Sqs 没有发送消息也没有错误显示

问题描述 投票:0回答:2

向 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 的完全访问权限。

javascript node.js amazon-web-services aws-lambda amazon-sqs
2个回答
1
投票

调用

sqs.sendMessage
不会启动操作。它也不会返回承诺,而是返回一个
AWS.Request
对象,因此那里的
await
不会执行任何操作。

为了真正启动异步操作并获得承诺,您的调用应该是

sqs.sendMessage(params).promise()

这在整个

aws-sdk
都是如此,而不仅仅是在 SQS API 中。

API文档: AWS.SQS.sendMessage() AWS.Request.promise()


0
投票

我刚刚遇到过这样的情况,我正在调用一个标准队列,并在请求中使用消息重复数据删除 ID。发送到队列的调用返回 OK,但什么也没发生。

从 SendMessageRequest 对象中删除 MessageGroupId 和 MessageDeduplicationId 解决了该问题。

© www.soinside.com 2019 - 2024. All rights reserved.