从另一个Lambda函数异步启动AWS java Lambda函数

时间:2018-01-28 16:51:45

标签: java amazon-web-services asynchronous lambda

我的目标是从另一个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秒才能完成)。

1 个答案:

答案 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不必知道。)