首页 > 解决方案 > Spring Boot + Apache Camel + 具有多个 lambda 端点的 AWS Lambda

问题描述

我正在学习 Apache Camel 以及如何将它与 Spring Boot 一起使用。我已经能够使用 Camel 和 Spring 成功实现一个 lambda 函数,并且到目前为止效果很好。但是,当我尝试添加要使用其他路线访问的第二个功能时,我遇到了麻烦。

在一个核心,我遇到的问题是 Camel 似乎需要camel.component.aws-lambda.configuration.function定义属性才能创建端点。但显然我不想定义该属性,因为我需要拥有多个功能,而不仅仅是一个功能。

当前有效的代码:

应用程序.yaml:

camel:
  component:
    aws-lambda:
      configuration:
        access-key: myAccessKey
        secret-key: mySecretKey
        region: MY_REGION
        function: myFunction
        operation: invokeFunction

我的路线:

@Component
public class MessageTestInvocationRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("somewhere").routeId("lambda")
                .to("aws-lambda://myFunction");
    }
}

现在如何添加第二条路线?一旦我注释掉该camel.component.aws-lambda.configuration.function属性,我现有的路线就会因 NPE 而中断。但是,如果我保留该属性的定义,那么似乎所有 AWS 调用都将与该函数相关联。

我曾尝试研究制作 custom LambdaComponent,我曾尝试研究制作 custom AWSLambdaClient,但这些都没有做任何有用的事情 - 一旦我注释掉该属性,一切都会崩溃。

标签: spring-bootaws-lambdaapache-camel

解决方案


我想到了。我获得 NPE 的原因是因为我没有定义操作。当函数和操作在 中定义时application.yaml,Spring 会尝试使用那个,这就是注释掉这些属性会导致该问题的原因。解决方案是注释掉functionandoperation属性,然后将我的路由代码更改为:

@Component
public class MessageTestInvocationRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("somewhere").routeId("lambda")
                .to("aws-lambda://myFunction?operation=invokeFunction");
    }
}

现在我能够创建多个并行运行的路线。


推荐阅读