【发布时间】:2018-01-28 16:51:44
【问题描述】:
我的目标是从另一个 Lambda 函数中启动一个 Lambda 函数。具体来说,我希望第二个函数开始,让第一个函数独立于第二个函数完成。第一个函数不需要返回任何响应。
我花了很多时间查看示例以及 AWS 文档。
我能够成功启动第二个功能,但无法使其独立于第一个功能运行。第一个函数总是等待第二个函数完成后再完成。
我使用这个代码:
AWSLambdaAsync lambda = AWSLambdaAsyncClientBuilder.standard().withRegion(Regions.EU_WEST_1).build();
InvokeRequest req = new InvokeRequest().withFunctionName(functionName).withPayload(jsonStuff);
// req.setInvocationType(InvocationType.Event);
Future<InvokeResult> future_res = lambda.invokeAsync(req);
这不会启动第二个函数(无论是否设置调用类型)。
如果我包含此代码:
try {
InvokeResult thisResult = future_res.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然后第二个函数被触发,但第一个函数在继续之前等待第二个函数完成。
如何启动第二个功能而无需等待它完成。目前它会将第一个功能完成所需的时间延长 2 秒(第一个功能,没有启动第二个功能,需要 4 秒才能完成)。
【问题讨论】:
-
请参阅:docs.aws.amazon.com/lambda/latest/dg/…。将 InvocationType 设置为 Event。默认情况下,Invoke API 采用 RequestResponse 调用类型。
标签: java amazon-web-services asynchronous lambda