我的目标是从另一个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秒才能完成)。
答案 0 :(得分:1)
您可以向Amazon SNS发布消息。当您去配置主题时,选择AWS Lambda并输入lambda的ARN来触发。
甚至有Amazon How To for triggering Lambda from SNS。
这就是我个人所做的:这里有更多的基础设施,但它甚至进一步区分了Lambda A和Lambda B的问题(因为如果,从现在起6个月,你会发现Lambda B必须是传统的微服务?简单:只需重新配置SNS主题.Lambda A不必知道。)