spring-boot - 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
,但这些都没有做任何有用的事情 - 一旦我注释掉该属性,一切都会崩溃。
解决方案
我想到了。我获得 NPE 的原因是因为我没有定义操作。当函数和操作在 中定义时application.yaml
,Spring 会尝试使用那个,这就是注释掉这些属性会导致该问题的原因。解决方案是注释掉function
andoperation
属性,然后将我的路由代码更改为:
@Component
public class MessageTestInvocationRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("somewhere").routeId("lambda")
.to("aws-lambda://myFunction?operation=invokeFunction");
}
}
现在我能够创建多个并行运行的路线。
推荐阅读
- c++ - 链接器错误:无法解析构造函数
- java - 如何通过鼠标单击包含 HTML 表的 JEditorPane 获取行
- python - 对卷积层形状的计算感到困惑
- ios - CocoaPods 未正确安装
- javascript - Vue 通过 props 和 "this" 回调
- hadoop - 加入 Hive Yarn aplication_id 和 Ranger 日志审计
- excel - 将命名范围设置为整数
- elasticsearch - Hibernate Search:Elasticsearch 和 Lucene 产生不同的搜索结果
- flutter - 工具提示 onTap 而不是 onLongPress 可能吗?
- php - 如何创建嵌套模型的验证以在 Laravel 中调用请求