有没有什么方法可以及早返回。来自Java AWS Lambda RequestStreamHandler

时间:2017-09-06 07:10:11

标签: java amazon-web-services aws-lambda

我使用API​​网关通过https调用Java AWS Lambda。

我有一个案例,我很快就知道我想从Lambda返回什么状态,但我还有更多工作要做,这不会影响状态。

有没有办法向调用者提供状态,但没有结束Lambda的执行?

我试过了:

@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
    JsonWriter writer = new JsonWriter(new OutputStreamWriter(outputStream));
    writer.beginObject();
    writer.name("statusCode").value("200");
    writer.endObject();
    writer.flush();
    writer.close();
    try {
        // this wait represents other work my Lambda is doing,
        // e.g. DB calls, requests to other webservices
        Thread.sleep(10 * 1000);
    } catch (InterruptedException e) {
    }
}

但调用者仍需要10秒才能看到状态。 有什么办法可以做我想要的吗?

我想让我的应用程序尽可能简单,并尽可能少地启动Lambda,而不会让调用者等待超过必要的时间。

2 个答案:

答案 0 :(得分:2)

如果您知道应该返回给调用者的状态以及您必须执行的其他工作不会影响状态代码和http响应,那么为什么要保留lambda执行(这是一个坏主意既然你被执行时间x内存计费了??

使用SNS触发另一个lambda来继续该过程。它看起来像是:

caller      ->      Lambda   ->   SNS  ->  Lambda
                      |
caller <---(status)----

答案 1 :(得分:1)

您可以在呼叫方法中等待这10秒钟。