我有一个将 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