SQS 连续 5 分钟内不触发 Lambda
SQS does not trigger Lambda within 5 minutes in sequential
我是 AWS 的新手,正在使用 SQS 触发 lambda 函数。
函数的顺序是,
Lambda A 并将队列传递给 SQS,然后 SQS 触发 Lambda B。
当我 运行 Lambda A 时,我看到 Lambda B 如我所料被触发。但是,当我 运行 Lambda A 在最后一个 运行 Lambda A 之后的 5 分钟内,Lambda B 没有被触发。我想知道是否有一个默认时间设置为“5 分钟”来使用 SQS 触发 Lambda 函数。如果可以,怎么改成“0分钟”?
有没有人遇到过类似的问题?谢谢,
// Lambda A
// sends multiple messages to an Amazon SQS queue
module.exports.handler = async (event, context, callback) => {
try {
// sendQueue function is imported in the head of the file
await sendQueue({ queueMessage }, QUEUE_URL)
} catch (e) {
console.error(e)
}
return {
statusCode: 200,
body: JSON.stringify(
{
message: 'Lambda A is done',
input: event,
},
null,
2
),
}
}
// Lambda B
// After SQS receives queues from Lambda A, SQS triggers to invoke Lambda B
module.exports.handler = async (event, context, callback) => {
// here calling Athena query with "await"
return `Successfully processed a message.`;
}
在 Lambda B 中,每次函数从 SQS 接收到消息时都会获取消息内容,如下所示。
[
{
messageId: 'b4146e42-a542-4e0e-bff9-ba7f96xxxxxx',
receiptHandle: 'xxxxxxxxxxxxxxx',
body: '{"queueMessage": "queueMessage sample text"}',
attributes: {
ApproximateReceiveCount: '1',
SentTimestamp: '1643094105466',
SequenceNumber: '18867376164708847616',
MessageGroupId: '123',
SenderId: 'xxxxxxxx:lambda-function-name',
MessageDeduplicationId: 'xxxxxx',
ApproximateFirstReceiveTimestamp: '1643094105466'
},
messageAttributes: { ReceiveMessageWaitTimeSeconds: [Object] },
md5OfMessageAttributes: 'aaaaaaaa',
md5OfBody: 'bbbbbbb',
eventSource: 'aws:sqs',
eventSourceARN: 'arn:aws:xxx.fifo',
awsRegion: 'ap-northeast-1'
}
]
请确保您没有在 SQS 中进行以下设置。此设置可能会在 x 时间后将您的 Lambda 函数延迟到 运行。
经过AWS documentation后,我找到了下面这行
If a message with a particular message deduplication ID is sent
successfully, any messages sent with the same message deduplication ID
are accepted successfully but aren't delivered during the 5-minute
deduplication interval.
基本上,使用SQS的FIFO队列,5分钟内发送的消息不会被传递,以避免发送重复消息。
我是 AWS 的新手,正在使用 SQS 触发 lambda 函数。 函数的顺序是, Lambda A 并将队列传递给 SQS,然后 SQS 触发 Lambda B。
当我 运行 Lambda A 时,我看到 Lambda B 如我所料被触发。但是,当我 运行 Lambda A 在最后一个 运行 Lambda A 之后的 5 分钟内,Lambda B 没有被触发。我想知道是否有一个默认时间设置为“5 分钟”来使用 SQS 触发 Lambda 函数。如果可以,怎么改成“0分钟”?
有没有人遇到过类似的问题?谢谢,
// Lambda A
// sends multiple messages to an Amazon SQS queue
module.exports.handler = async (event, context, callback) => {
try {
// sendQueue function is imported in the head of the file
await sendQueue({ queueMessage }, QUEUE_URL)
} catch (e) {
console.error(e)
}
return {
statusCode: 200,
body: JSON.stringify(
{
message: 'Lambda A is done',
input: event,
},
null,
2
),
}
}
// Lambda B
// After SQS receives queues from Lambda A, SQS triggers to invoke Lambda B
module.exports.handler = async (event, context, callback) => {
// here calling Athena query with "await"
return `Successfully processed a message.`;
}
在 Lambda B 中,每次函数从 SQS 接收到消息时都会获取消息内容,如下所示。
[
{
messageId: 'b4146e42-a542-4e0e-bff9-ba7f96xxxxxx',
receiptHandle: 'xxxxxxxxxxxxxxx',
body: '{"queueMessage": "queueMessage sample text"}',
attributes: {
ApproximateReceiveCount: '1',
SentTimestamp: '1643094105466',
SequenceNumber: '18867376164708847616',
MessageGroupId: '123',
SenderId: 'xxxxxxxx:lambda-function-name',
MessageDeduplicationId: 'xxxxxx',
ApproximateFirstReceiveTimestamp: '1643094105466'
},
messageAttributes: { ReceiveMessageWaitTimeSeconds: [Object] },
md5OfMessageAttributes: 'aaaaaaaa',
md5OfBody: 'bbbbbbb',
eventSource: 'aws:sqs',
eventSourceARN: 'arn:aws:xxx.fifo',
awsRegion: 'ap-northeast-1'
}
]
请确保您没有在 SQS 中进行以下设置。此设置可能会在 x 时间后将您的 Lambda 函数延迟到 运行。
经过AWS documentation后,我找到了下面这行
If a message with a particular message deduplication ID is sent successfully, any messages sent with the same message deduplication ID are accepted successfully but aren't delivered during the 5-minute deduplication interval.
基本上,使用SQS的FIFO队列,5分钟内发送的消息不会被传递,以避免发送重复消息。