为什么我的AWS lambda函数中没有调用我的afterResponse方法?

时间:2016-12-31 16:21:00

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

我想在亚马逊S3上托管的静态网站上建立联系表格。 CloudFront的。我决定用Java编写简单的AWS Lambda程序,并通过AWS API Gateway从我的静态网站调用它。

这是我的LambdaHandler类:

public class LambdaHandler extends RequestHandler2 {

    FormData formData = new FormData();

    public LambdaResponse handleRequest(FormData formData, Context context) {
        this.formData = formData;
        System.out.println(String.format("Hello %s.", formData.getName()));
        Map<String, String> headers = new HashMap<>();
        headers.put("Access-Control-Allow-Origin", "*");
        headers.put("Access-Control-Allow-Headers", "Content-Type");
        return new LambdaResponse(200, headers, "{}");
    }

    @Override
    public void afterResponse(Request<?> request, Response<?> response) {
        System.out.println("afterResponse");
        try {
            sendMail(formData.getName(), formData.getEmail(), formData.getCompany(), formData.getPhone(), formData.getSubject(), formData.getMessage());
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

}

问题是afterResponse方法未被调用。我需要在返回响应后发送电子邮件,因为发送电子邮件(通过Amazon SES BTW)可能需要13-18秒(特别是在一段时间未使用后调用lambda函数)并且我不会#39 ; t希望用户等那么久。

在我的AWS Lambda配置中,我有com.example.emailservice.LambdaHandler::handleRequest作为处理程序。

1 个答案:

答案 0 :(得分:0)

您应该创建第二个Lambda函数,其唯一职责是调用sendMail函数。然后你应该让当前的LambdaHandler在返回LambdaResponse实例之前调用第二个Lambda函数作为“事件”(所以你不要等到它完成)。