我可以在 AWS Lambda 中使用 Apache Camel 吗?
Can I use Apache Camel in an AWS Lambda?
Apache Camel 具有许多使事件处理优雅且易于编码的功能。能够在 AWS Lambda 中利用它会很有用。
当然,并非所有功能都适用,尤其是任何需要长期运行的功能。
还需要考虑管理持久状态,例如幂等存储库和节流。
但在简单的情况下它会非常有用。
原来使用Redhat的Quarkus框架很简单
我举了一个简单的例子:https://github.com/jcable/SampleCamelLambda
骆驼路线很简单:
from("direct:input").to("log:input")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
InputObject input = exchange.getIn().getBody(InputObject.class);
String result = input.getGreeting() + " " + input.getName();
OutputObject out = new OutputObject();
out.setResult(result);
out.setRequestId("aws-request-1");
exchange.getIn().setBody(out);
}
});
将路由调整为 Lambda 使用了 Quarkus RequestHandler。
public class Lambda implements RequestHandler<InputObject, OutputObject> {
@Inject
CamelContext camelContext;
@Override
public OutputObject handleRequest(InputObject input, Context context) {
return camelContext.createProducerTemplate().requestBody("direct:input", input, OutputObject.class);
}
}
CDI 用于将 CamelContext 注入请求处理程序,然后使用 camelContext 对象创建一个
可用于调用 Camel 路由的 ProducerTemplate。
该示例的 Maven 项目派生自 Quarkus lambda 示例,具有来自 Camel Quarkus 示例的 Apache Camel 依赖项。
Apache Camel 具有许多使事件处理优雅且易于编码的功能。能够在 AWS Lambda 中利用它会很有用。
当然,并非所有功能都适用,尤其是任何需要长期运行的功能。
还需要考虑管理持久状态,例如幂等存储库和节流。
但在简单的情况下它会非常有用。
原来使用Redhat的Quarkus框架很简单
我举了一个简单的例子:https://github.com/jcable/SampleCamelLambda
骆驼路线很简单:
from("direct:input").to("log:input")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
InputObject input = exchange.getIn().getBody(InputObject.class);
String result = input.getGreeting() + " " + input.getName();
OutputObject out = new OutputObject();
out.setResult(result);
out.setRequestId("aws-request-1");
exchange.getIn().setBody(out);
}
});
将路由调整为 Lambda 使用了 Quarkus RequestHandler。
public class Lambda implements RequestHandler<InputObject, OutputObject> {
@Inject
CamelContext camelContext;
@Override
public OutputObject handleRequest(InputObject input, Context context) {
return camelContext.createProducerTemplate().requestBody("direct:input", input, OutputObject.class);
}
}
CDI 用于将 CamelContext 注入请求处理程序,然后使用 camelContext 对象创建一个 可用于调用 Camel 路由的 ProducerTemplate。
该示例的 Maven 项目派生自 Quarkus lambda 示例,具有来自 Camel Quarkus 示例的 Apache Camel 依赖项。