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

标签 aws-lambda quarkus

我已经使用 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/

相关文章:

node.js - 为什么我无法使用 Lambda 函数将文件上传到 s3?

amazon-web-services - 在 API 网关中使用 AWS Lambda 授权方

amazon-web-services - AWS ApiGateway 主机 header 和自定义域名

quarkus - 有没有办法以编程方式覆盖应用程序属性?

java - 如果配置中提供了默认值,Quarkus >= 0.18.0 将无法构建

java - Quarkus:dockerfile.jvm 与 dockerfile.native

java - Quarkus 中如何使用不同的数据源进行读写查询?

javascript - AWS Lambda JavaScript SDK 异步处理程序

java - 如何从aws lambda java中的类路径读取文件