Сообщения SQS всегда остаются позади без сервера - PullRequest
1 голос
/ 09 мая 2019

Я работаю с бессерверным API, и у меня есть лямбда-функция, запущенная из очереди sqs, с размером пакета 1, что означает, что я намерен запустить лямбда-сигнал, как только я отправлю сообщение в очередь, это работает нормально, но когда я впервые использую функцию, она не срабатывает, а когда я запрашиваю второй раз, она отправляет первое сообщение, это всегда одно сообщение за тем, что я отправляю. Я приложил свой код, не уверен, что мне здесь не хватает, любая помощь приветствуется.

serverless.yml

iamRoleStatements:
  - Effect: "Allow"
    Action:
      - "sqs:SendMessage"
      - "sqs:ReceiveMessage"
    Resource: "arn:aws:sqs:${self:provider.region}:*:EmailQueueDev"

functions:
   sendGrid:
      handler: handler.sendGrid
      events:
        - sqs: 
            arn: arn:aws:sqs:us-east-1:${file(./config.js):sqs.account_id}:EmailQueueDev
            batchSize: 1
resources:
 Resources:
   EmailQueue:
     Type: "AWS::SQS::Queue"
     Properties:
       QueueName: "EmailQueueDev"

код

module.exports.sendEmail = async (event) => {

  // Trigger the SQS for SendGrid Function To Execute
  const sqs = new aws.SQS();
  const params = {
    MessageBody: JSON.stringify(transaction.data),
    QueueUrl: process.env.QUE_URL
  }

  sqs.sendMessage(params, (err, data) => {
    if(err) {
      log(JSON.stringify({info: 'Errors sending message to the Queue', trace: err}));
    }
    else console.log('data is', data);
  });

};

1 Ответ

1 голос
/ 09 мая 2019

параметр "batchSize" указывает максимальное количество сообщений для обработки за один вызов функции и не влияет, когда запускается лямбда-функция.Когда вы определяете SQS в качестве источника событий, AWS создает 5 параллельных соединений с длинным опросом, и когда он получает что-то в очереди, он запускает вашу функцию.Как долго вы ждете после отправки первого сообщения, чтобы увидеть, вызывает ли оно функцию или нет?между получением сообщения в очереди и срабатыванием функции может быть небольшая задержка.

...