Quarkus AWS Lambda 通用处理程序

3
我已经阅读了关于Quarkus的AWS Lambda文档,它看起来非常有趣。
我想要部署一些Quarkus本地lambda到AWS,就像这里所解释的那样https://aws.amazon.com/blogs/architecture/field-notes-optimize-your-java-application-for-aws-lambda-with-quarkus/。我的目标是利用Java生态系统的能力(而不是基于JS NPM的Lambda),并且仍然具有非常低的冷启动和热执行时间,以降低AWS计费。
我不想编写将请求映射到正确的“控制器”方法的逻辑,例如:
[...]
   switch (httpMethod) {

            case "GET":
                Map<String, String> queryStringParameters = request.getQueryStringParameters();

                String userId = null;

                if (pathParameters != null)
                    userId = pathParameters.get("userId");
                else if (queryStringParameters != null)
                    userId = queryStringParameters.get("userId");

                if (userId == null || userId.length() == 0) {
                    LOGGER.info("Getting all users");
                    userList = userService.findAll();
                    LOGGER.info("GET: " + userList);
                    try {
                        result = mapper.writeValueAsString(userList);
                    } catch (JsonProcessingException exc) {
                        LOGGER.error(exc);
                    }
[...]

对我来说,编写代码成本太高且容易出错,这是一个绊脚石。

相反,我想利用类似于此处描述的机制:简而言之,Lambda处理程序将Lambda输入数据(流、上下文等)映射到HTTP请求,JAX-RS实现完成其余工作,或者类似的操作,我的职责不是完全清楚。

这非常有趣,因为您可以像往常一样编写控制器,使用注释和所有内容,而您的Lambda保持非常简单,只需映射对象:

public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context)
            throws IOException {
    handler.proxyStream(inputStream, outputStream, context);

Jersey、Spring和其他框架是否存在ProxyStream实现,Quarkus JAX-RS实现是否存在类似的ProxyImplementation(Jackson)?

1个回答

2
您可以了解一下Quarkus Lambda REST扩展,它可以为JAX-RS提供此功能。但是目前您无法同时使用基于流的请求(例如来自S3 / SQS)和基于HTTP的请求。这是我正在努力解决的问题,我认为我将采用您提到的手动映射方法。

谢谢aciobanu,我会尝试的。 - Ivan Rododendro
顺便说一句,我与Quarkus开发团队的某位成员进行了长时间的交谈,基本上他们不想实现双重使用的Lambda处理程序...没有真正的理由。 - aciobanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接