我想在亚马逊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
作为处理程序。
答案 0 :(得分:0)
您应该创建第二个Lambda函数,其唯一职责是调用sendMail
函数。然后你应该让当前的LambdaHandler在返回LambdaResponse实例之前调用第二个Lambda函数作为“事件”(所以你不要等到它完成)。