Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在通过lambda函数向SQS发送消息时插入_Javascript_Node.js_Lambda_Aws Lambda - Fatal编程技术网

Javascript 如何在通过lambda函数向SQS发送消息时插入

Javascript 如何在通过lambda函数向SQS发送消息时插入,javascript,node.js,lambda,aws-lambda,Javascript,Node.js,Lambda,Aws Lambda,我正在尝试使用Lambda向SQS队列发送消息: 这是我的密码: var QUEUE_URL = 'https://us-west-2.queue.amazonaws.com/123456789/ntech-event-processing-dev.fifo'; var AWS = require('aws-sdk'); var sqs = new AWS.SQS({region : 'us-west-2'}); exports.handler = function(event, contex

我正在尝试使用Lambda向SQS队列发送消息:

这是我的密码:

var QUEUE_URL = 'https://us-west-2.queue.amazonaws.com/123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}
这是我的测试数据(JSON),注意我在这里定义了MessageGroupId

{
  "MessageGroupId": "1",
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}
我得到以下错误:

2020-04-16T17:40:37.604Z    fa709a07-0bcd-4b17-a48b-341a984aec88    INFO    error: Fail Send MessageMissingParameter: The request must contain the parameter MessageGroupId.
2020-04-16T17:40:37.661Z    fa709a07-0bcd-4b17-a48b-341a984aec88    ERROR   Invoke Error    {"errorType":"Error","errorMessage":"error","stack":["Error: error","    at _homogeneousError (/var/runtime/CallbackContext.js:13:12)","    at postError (/var/runtime/CallbackContext.js:30:54)","    at done (/var/runtime/CallbackContext.js:57:7)","    at Object.done (/var/runtime/CallbackContext.js:105:16)","    at Response.<anonymous> (/var/task/index.js:13:15)","    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:364:18)","    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)","    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)"]}
2020-04-16T17:40:37.604Z fa709a07-0bcd-4b17-a48b-341a984aec88信息错误:发送失败消息丢失参数:请求必须包含参数MessageGroupId。
2020-04-16T17:40:37.661Z fa709a07-0bcd-4b17-a48b-341a984aec88错误调用错误{“ERROR类型”:“ERROR”,“errorMessage”:“ERROR”,“stack”:[“ERROR:ERROR”,“at{u homogeneousError(/var/runtime/CallbackContext.js:13:12)”,“at postError(/var/runtime/CallbackContext.js:30:54)”,“at done(/var/runtime/CallbackContext/CallbackContext.js:57:7)”,“at Object.done(/var/runtime/CallbackContext.js:105:16)”,“at Response.AND
但我没有找到答案


欢迎提供任何帮助!

如果您查看的文档,您可以看到:

MessageGroupId-此参数仅适用于FIFO (先进先出)队列

我假设您意外地在SQS上创建了FIFO队列。因此您需要该附加参数。您可以这样修改代码:

var QUEUE_URL = 'https://us-west-2.queue.amazonaws.com/123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL,
    MessageGroupId: "TestGroup"
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}
var QUEUE_URL = 'https://us-west-2.queue.amazonaws.com/123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL,
    MessageGroupId: event.MessageGroupId
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}
如果您没有从事件中获取消息,则将MessageGroupId放入事件中是没有帮助的。如果您希望从事件中接收MessageGroupId,则可以如下所示:

var QUEUE_URL = 'https://us-west-2.queue.amazonaws.com/123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL,
    MessageGroupId: "TestGroup"
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}
var QUEUE_URL = 'https://us-west-2.queue.amazonaws.com/123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL,
    MessageGroupId: event.MessageGroupId
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}

我发现有用的教程是这样的。

如果您查看的文档,您可以看到:

MessageGroupId-此参数仅适用于FIFO (先进先出)队列

我假设您意外地在SQS上创建了FIFO队列。因此您需要该附加参数。您可以这样修改代码:

var QUEUE_URL = 'https://us-west-2.queue.amazonaws.com/123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL,
    MessageGroupId: "TestGroup"
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}
var QUEUE_URL = 'https://us-west-2.queue.amazonaws.com/123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL,
    MessageGroupId: event.MessageGroupId
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}
如果您没有从事件中获取消息,则将MessageGroupId放入事件中是没有帮助的。如果您希望从事件中接收MessageGroupId,则可以如下所示:

var QUEUE_URL = 'https://us-west-2.queue.amazonaws.com/123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL,
    MessageGroupId: "TestGroup"
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}
var QUEUE_URL = 'https://us-west-2.queue.amazonaws.com/123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL,
    MessageGroupId: event.MessageGroupId
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}

我发现有用的教程是这样的。

从事件中删除
MessageGroupId
。您的
MessageGroupId
位于
MessageBody
下。从事件中删除
MessageGroupId
。您的
MessageGroupId
位于
MessageBody
下。