aws sqs 消息一直消失

aws sqs messages consistently disappear

获得了 3 个 SQS 队列和 3 个 lambda。 Lambda1 向 queue1 发送 50 条消息,lambda2 从 queue1 获取一条消息并发送到 queue2,lambda3 从 queue2 获取并转发到 queue3。通过 cdk 定义的队列:

const stageOneQ = new sqs.Queue(this, "StageOne", {
  fifo: true,
  queueName: "StageOne.fifo",
});

const stageTwoQ = new sqs.Queue(this, "StageTwo", {
  fifo: true,
  queueName: "StageTwo.fifo",
});

const stageThreeQ = new sqs.Queue(this, "StageThree", {
  fifo: true,
  queueName: "StageThree.fifo",
});

与 lambdas 相同,例如:

const stageOneHandler = new lambda.Function(this, "stageOneHandler", {
  runtime: lambda.Runtime.NODEJS_10_X,
  code: lambda.Code.fromAsset("resources"),
  handler: "stage-one-handler.handler",
  timeout: Duration.seconds(30),
  environment: {
    stageTwoQ: stageTwoQ.queueUrl
  }
});

队列设置为 lambda2 和 3 个事件源,例如:

stageOneHandler.addEventSource(new SqsEventSource(stageOneQ));

并且在 lambda 事件中找到消息:

exports.handler = async function(event, context) {
   console.log(`Received: ${event.Records[0].body}`);
 .....

lambdas 像这样发送消息(profile.email 是唯一的):

await sqs.sendMessage({
  MessageBody: message,
  MessageGroupId: "group1",
  MessageDeduplicationId: profile.email,
  QueueUrl: queueUrl
}).promise();

queue1 按预期收到 50 条消息,但 queue2 收到 18 到 26 条消息,而 queue3 收到大约 6 条或 12 条消息。如果 lambda1 以 1 秒的间隔发送 50 条消息,则所有消息都会传送到所有队列。当间隔减少到 100 毫秒或更短时,一些消息消失得无影无踪,发送但从未收到。为什么?! AWS SQS.. 不好吗?尝试了基于内容的重复数据删除,没有帮助。

在此代码中:

console.log(`Received: ${event.Records[0].body}`);

您只记录了列表中的第一条记录。 event.Records 是一个数组。您需要遍历该数组并处理其中的所有记录。默认情况下,Lambda SQS 集成将一次最多分批发送 10 条记录。您必须用 1 的值覆盖 Lambda/SQS integration batch size setting 才能一次只收到一条消息。