我将lambda配置为在将消息发布到SQS队列时被触发。这是用于部署的SAM模板。
int firstval = 49;
button.setOnClickListener(v -> incValue());
private void incValue() {
System.out.println(Integer.toString(firstval += 30));
}
我正在使用 MyQueue:
Type: AWS::SQS::Queue
Properties:
VisibilityTimeout: 180
DelaySeconds: 90
MyLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: ../pathToCode
Handler: index.handler
Events:
MySQSEvent:
Type: SQS
Properties:
Queue: !GetAtt MyQueue.Arn
的{{1}}属性,这显然不起作用。消息发布到队列中后,我的lambda将立即执行。我该如何延迟呢?
答案 0 :(得分:3)
最好的解决方案是使用AWS Step Functions。
由SQS触发的lambda应该执行状态机,其中第一步是所需的睡眠量,第二步是lambda调用。
答案 1 :(得分:1)
延迟秒数:每当您轮询队列时,它都会延迟“接收消息”调用。但是,只要将消息推送到队列中,该消息就会立即插入。
如果您希望在触发后的一定间隔后执行lambda,请在开始执行之前放置sleep(n),并根据需要增加lambda超时。截至目前,尚无直接方法来延迟触发,一旦消息进入队列,您的lambda就会被触发。
答案 2 :(得分:1)
在 2021 年,最好的答案是使用 SQS 新的“批处理窗口”功能:
使用此功能,您可以让 SQS 队列在调用 Lambda 函数之前最多收集 5 分钟的消息。