gpt4 book ai didi

aws-lambda - 使用相同的 Quarkus 代码库处理 AWS HTTP 和 SQS 事件

转载 作者:行者123 更新时间:2023-12-03 20:48:29 27 4
gpt4 key购买 nike

我已经使用 quarkus-amazon-lambda-http mvn 依赖项设置了 http quarkus 项目。
它工作正常,但最重要的是我想为 SQS 事件添加自定义 lambda 处理程序。
我添加了 sqs lambda 处理程序

@Named("SqsHandler")
public class SqsHandlerLambda implements RequestHandler<InputObject, OutputObject> {

}
并在 application.properties 中添加了处理程序定义: quarkus.lambda.handler=SqsHandler每当我尝试运行它时: mvn quarkus:dev它给:
io.quarkus.builder.BuildException: Build failure: Multiple handler classes.  You have a custom handler class and the AWS Lambda HTTP extension.  Please remove one of them from your deployment
我的想法是在 SAM 模板中使用环境变量来部署 2 个功能,一个处理 http 请求,其他 SQS 事件。但是有可能实现我想要的吗?
80% 的代码库对于 Http 事件和 SQS 事件是相同的,所以如果我在两个单独的代码存储库中执行,将会有很多重复的代码。

最佳答案

Lambda 提供了一个较低级别的处理程序,我个人觉得它更容易处理:

public void handleRequest(InputStream inputStream,
OutputStream outputStream,
Context context) throws IOException
这允许您执行以下操作:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

....

@Named("lambdaHandler")
public class LambdaHandler implements RequestStreamHandler {

public void handleRequest(InputStream inputStream,
OutputStream outputStream,
Context context) throws IOException {

LambdaLogger logger = context.getLogger();

ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(inputStream);

logger.log("input is " + objectMapper.writeValueAsString(rootNode));

// i'm totally guessing at the path
String value = rootNode.path("request").path("email").asText();
这将允许您接受任何输入。缺点是您需要对 InputStream 进行一些自省(introspection)。来确定你得到了什么。

关于aws-lambda - 使用相同的 Quarkus 代码库处理 AWS HTTP 和 SQS 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64283853/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com