简体   繁体   English

SQS 在 AWS lambda 使用@aws-sdk node.js 发送消息错误

[英]SQS send message error using @aws-sdk node js at AWS lambda

I am trying to send message from my AWS Lambda to AWS SQS but it isn't quiet working and throwing me the error.我正在尝试将消息从我的 AWS Lambda 发送到 AWS SQS,但它工作不安静并向我抛出错误。

2022-12-26T14:58:31.651Z    282ada00-ea4a-45b6-afe4-e3a7f16e8c5a    INFO    MissingParameter: The request must contain the parameter Label.
    at throwDefaultError (/var/task/node_modules/@aws-sdk/smithy-client/dist-cjs/default-error-handler.js:8:22)
    at deserializeAws_queryAddPermissionCommandError (/var/task/node_modules/@aws-sdk/client-sqs/dist-cjs/protocols/Aws_query.js:292:51)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async /var/task/node_modules/@aws-sdk/middleware-serde/dist-cjs/deserializerMiddleware.js:7:24
    at async /var/task/node_modules/@aws-sdk/middleware-signing/dist-cjs/middleware.js:14:20
    at async /var/task/node_modules/@aws-sdk/middleware-retry/dist-cjs/retryMiddleware.js:27:46
    at async /var/task/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:5:22
    at async sendToSQS (/var/task/sendToSqs.js:28:20)
    at async exports.handler (/var/task/index.js:19:22) {
  '$fault': 'client',
  '$metadata': {
    httpStatusCode: 400,
    requestId: 'bf137e9a-24bc-52bd-9416-22b99c6b82f5',
    extendedRequestId: undefined,
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  },
  Type: 'Sender',
  Code: 'MissingParameter',
  Detail: ''
}

I am not sure what parameters and in which way I need to include to make it work.我不确定我需要包含哪些参数以及以何种方式使其工作。 This is my code for sending message, where from my main module I send a simple data value as part of my message to be sent to SQS.这是我发送消息的代码,我从我的主模块发送一个简单的数据值作为我要发送到 SQS 的消息的一部分。

const { SQSClient, AddPermissionCommand } = require("@aws-sdk/client-sqs");


 const sendToSQS=async(data)=>{
    const client = new SQSClient({ region: "eu-west-1" });


    var params = {
      DelaySeconds: 0,
      MessageAttributes: {
        "Author": {
          DataType: "String",
          StringValue: "event params"
        },
      },
      MessageGroupId:`${data}`,
      MessageBody:JSON.stringify(data),
      QueueUrl:"https://sqs.eu-west-1.amazonaws.com/336070547288/Salesforce-cqd-orders-delayer-retry"
    };
    
    
    try{
        
    const command = new AddPermissionCommand(params);
        
    let queueRes = await client.send(command);
    
    console.info("[LAMBDA/@sqs] retry mechanism has succeeded. Data sent to SQS successfully")
    console.log(queueRes)
   
         const response = {
            statusCode: 200,
            body: "Data sent from lambda to sqs successfully.",
        }; 
    return response
            
        
        
    }catch(error){
        
        console.error("[LAMBDA/@s] retry mechanism has failed. Data wasn't sent to SQS")
        console.log(error)
        
            
        const response = {
            statusCode: 200,
            body: "Lambda to SQS error",
        };
    
        return response;
        
}


 }


 module.exports={sendToSQS}

Your message has delaySeconds which is not required and MessageGroupId which is only required for FIFO queue.您的消息具有不需要的delaySeconds和仅 FIFO 队列需要的MessageGroupId

You can check sendMessage code reference from here AWS Wiki您可以从此处查看 sendMessage 代码参考AWS Wiki

Also, check this API reference for Send Message此外,检查此 API 参考以获取发送消息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM