首页 > 解决方案 > 我可以在 AWS Lambda 中使用 Apache Camel 吗?

问题描述

Apache Camel 具有许多使事件处理优雅且易于编码的特性。能够在 AWS Lambda 中利用这一点会很有用。

当然,并非所有功能都适用,尤其是任何需要长期过程的功能。

还需要考虑管理持久状态,例如幂等存储库和节流。

但在简单的情况下它会非常有用。

标签: aws-lambdaapache-camel

解决方案


事实证明,使用 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 示例,其中 Apache Camel 依赖项来自 Camel Quarkus 示例。


推荐阅读