我需要一个“稍后再检查”功能,在传统的Web应用程序中,例如可以通过使用基于Redis的队列来实现,每个队列都带有时间戳(在PHP世界中,Laravel具有此功能)。框)。
我在Lambda中对此的解决方案是将消息重新发送到提供该功能的同一队列,但这一次有所延迟。如此反复,直到我们知道是时候再次检查该东西(API,状态等等)了。
这是我的全部功能:
exports.handler = async (event) => {
const AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-2' });
let sqs = new AWS.SQS({apiVersion: '2012-11-05'});
let messageBody = event.Records[0].body;
let details = JSON.parse(messageBody);
console.log("Received event. Count is: " + details.counter);
details.counter += 1;
messageBody = JSON.stringify(details);
await sqs.sendMessage({
DelaySeconds: 10,
MessageBody: messageBody,
QueueUrl: 'https://sqs.us-east-2.amazonaws.com/123456/TestRequeueFeature'
});
};
在上面的测试中,调用功能的是名为TestRequeueFeature
的队列。快要结束时,我正在发送一条延迟十秒的消息。但是,此消息从未出现(我的意思是,即使已经几分钟,也没有再次调用该函数)。在CloudWatch中,此功能只有一个日志,这是我使用测试事件启动它的时间。除此之外,该消息似乎已经消失。
该如何诊断?这实际上是在一个真实的项目中发生的,所以我想我将创建一个隔离的测试,看看它如何进行。