voi*_*rld 7 aws-lambda quarkus
我已经使用 quarkus-amazon-lambda-http mvn 依赖项设置了 http quarkus 项目。它工作正常,但最重要的是我想为 SQS 事件添加自定义 lambda 处理程序。
我添加了 sqs lambda 处理程序
@Named("SqsHandler")
public class SqsHandlerLambda implements RequestHandler<InputObject, OutputObject> {
}
Run Code Online (Sandbox Code Playgroud)
并在 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
Run Code Online (Sandbox Code Playgroud)
我的想法是使用 SAM 模板中的环境变量来部署 2 个函数,其中一个函数处理 http 请求和其他 SQS 事件。但有可能实现我想要的吗?
Http 事件和 SQS 事件的代码库 80% 是相同的,因此如果我在两个单独的代码存储库中执行,将会出现大量重复代码。
Lambda 提供了一个较低级别的处理程序,我个人认为它更容易处理:
public void handleRequest(InputStream inputStream,
OutputStream outputStream,
Context context) throws IOException
Run Code Online (Sandbox Code Playgroud)
这允许你做类似的事情:
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();
Run Code Online (Sandbox Code Playgroud)
这将允许您接受任何输入。缺点是你需要进行一些反省才能InputStream确定你得到了什么。
| 归档时间: |
|
| 查看次数: |
1401 次 |
| 最近记录: |