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

Aws lambda 使用相同的Quarkus代码库处理AWS HTTP和SQS事件,aws-lambda,quarkus,Aws Lambda,Quarkus,我已经使用quarkus amazon lambda http mvn依赖项设置了http quarkus项目。 它工作得很好,但除此之外,我想为SQS事件添加自定义lambda处理程序 我添加了sqs lambda处理程序 @Named("SqsHandler") public class SqsHandlerLambda implements RequestHandler<InputObject, OutputObject> { } 我的想法是使用SAM模

我已经使用quarkus amazon lambda http mvn依赖项设置了http quarkus项目。 它工作得很好,但除此之外,我想为SQS事件添加自定义lambda处理程序

我添加了sqs lambda处理程序

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

}
我的想法是使用SAM模板中的environment vairables部署两个函数,一个处理http请求,另一个处理SQS事件。但是有可能实现我想要的吗


对于Http事件和SQS事件,80%的代码基础是相同的,因此如果我在两个独立的代码库中执行此操作,将有大量重复代码。

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
进行一些自省,以确定您得到了什么。

您解决了这个问题吗?我经历了同样的情况,我考虑使用多模块maven项目
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();