SQS FIFO 随机消息未发送到 lambda

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

我有一个将 AWS SQS 与 AWS Lambda 作为触发器集成的服务。

发生了什么

所以基本上当我向 SQS 发送多条消息时,它们会被接收(我通过 AWS 控制台确认)但其中一些没有被发送到 lambda 服务(我在我们的无服务器应用程序监控系统中确认)。它们不仅没有从 SQS 发送到 Lambda,而且还被无缘无故地删除。

我的代码

发送消息的方法是:

import * as AWS from "@aws-sdk/client-sqs";
import * as crypto from "crypto";

export class SqsService {
  private readonly sqsClient = new AWS.SQS({ region: "us-east-1" });

  public async sendMessages(
    queueUrl: string,
    messageGroupId: string,
    messages: any[]
  ) {
    const params = {
      QueueUrl: queueUrl,
      Entries: [],
    };
    const entries = [];
    let counter = 0;
    for (const message of messages) {
      const index = Math.floor(counter / 10);
      if (counter % 10 === 0) entries[index] = [];
      entries[index].push({
        Id: crypto
          .randomBytes(32)
          .toString("hex")
          .replace(/[\W_]+/g, ""),
        MessageBody: JSON.stringify(message),
        MessageGroupId: messageGroupId,
      });
      counter += 1;
    }
    for (const entry of entries) {
      params.Entries = entry;
      await this.sqsClient.sendMessageBatch(params);
    }
  }
}

我的函数无服务器配置:

schedulerListener:
    name: ${self:provider.stage}-scheduler-listener
    handler: src/handlers/sqsScheduler.handler
    events:
      - sqs:
          arn: xxxxx
          batchSize: 10

SQS 设置

amazon-web-services aws-lambda amazon-sqs
© www.soinside.com 2019 - 2024. All rights reserved.