我可以在 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 依赖项。