有谁知道异步调用Amazon AWS Lambda函数而不是同步调用的当前正确方法?
AWS Java SDK中的InvokeAsync API仍然可用但标记为已弃用,他们建议您使用Invoke API。我无法弄清楚为什么他们会强迫我们使用同步。我有一个Web前端,可以调度一些批处理作业。我不能指望前端在等待响应时保持连接打开几分钟(实际上在处理完大约4-5分钟后通过电子邮件发送给他们)。
理想情况下,我试图弄清楚如何使用他们的API端点而不是Java SDK来实现这一点,因为我运行后端的环境(GAE)不支持AWS使用HttpClient。
答案 0 :(得分:5)
我正在查看最新的API文档here,看起来只有AWSLambdaAsyncClient.invokeAsyncAsync()
被弃用了。 AWSLambdaAsyncClient.invokeAsync()
方法未标记为已弃用。看起来他们只是通过删除InvokeAsyncRequest
和InvokeAsyncResult
类以及额外invokeAsyncAsync()
方法的需要来进行一些代码清理。
您应该能够使用AWSLambdaAsyncClient.invokeAsync()
使用InvokeRequest
并返回InvokeResult
的方法。您可能需要将InvocationType
上的InvokeRequest
设置为InvocationType.Event
。如果您使用Async客户端,是否需要它是不清楚的。
关于在不使用SDK的情况下异步调用Lambda函数的第二个问题,我将研究使用API Gateway as a service proxy。这是为异步调用公开Lambda函数的推荐方法。
答案 1 :(得分:4)
以下代码可用于从另一个Lambda
异步调用LambdaAWSLambdaAsyncClient client = new AWSLambdaAsyncClient();
client.withRegion(Regions.fromName(region));
InvokeRequest request = new InvokeRequest();
request.setInvocationType("Event");
request.withFunctionName(functionName).withPayload(payload);
InvokeResult invoke = client.invoke(request);
答案 2 :(得分:0)
已弃用已接受答案中给出的方法。用户@dassum给出的答案是要遵循的方法,但是答案缺乏解释。
创建InvokeRequest时,对于异步调用,将InvocationType设置为“ Event”,对于同步调用,将“ RequestResponse”设置为。
AWSLambda lambda = //create your lambda client here
lambda.invoke(new InvokeRequest()
.withFunctionName(LAMBDA_FUNCTION_NAME)
.withInvocationType(InvocationType.Event) //asynchronous
.withPayload(payload))
参考文档:
答案 3 :(得分:0)
msg_receive_1 = WebDriverWait(driver1, 15).until(
EC.visibility_of_element_located((By.XPATH, "//*[text()='Hello, my name is Jeff.']"))
)