架构

LambdaRouteBuilder

师成师成· 更新于 2026-09-28· 阅读 4 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

LambdaRouteBuilder

LambdaRouteBuilder 是一个函数式接口,用于以 Java lambda 风格通过 DSL 创建路由规则。

仅限 Java:使用 lambda 风格定义的路由

rb -> rb.from("timer:foo").log("Hello Lambda");

LambdaRouteBuilder 的实例会被发现并转换为 RouteBuilder 实例,随后添加到 CamelContext 中。

用法

要使用 LambdaRouteBuilder,你需要创建一个返回 LambdaRouteBuilder 的方法,然后即可使用 Java lambda 风格来定义单条路由。

在下面的示例中,方法 myRoute 被用来创建一条 Camel 路由,该路由从 Kafka 消费消息并将消息发送到 JMS。

为了让路由在启动时能被 Camel 发现,该方法必须加上注解。在使用 camel-main 的独立模式下,该方法应使用 @BindToRegistry 注解;如果是 Spring Boot,则使用 @Bean;如果是 Quarkus,则使用 @Produce。

仅 Java 方式:使用 @BindToRegistry 注册 LambdaRouteBuilder

public class MyConfiguration {
    @BindToRegistry
    public LambdaRouteBuilder myRoute() {
        return rb -> rb.from("kafka:cheese?clientId=myClient&batching=true")
                            .to("jms:queue:foo");
    }
}

LambdaEndpointRouteBuilder

Endpoint DSL 也可以作为 lambda 路由构建器使用,即 camel-endpointdsl JAR 中的 org.apache.camel.builder.endpoint.LambdaEndpointRouteBuilder 类。

纯 Java:将 LambdaEndpointRouteBuilder 与类型安全的 Endpoint DSL 配合使用

public class MyConfiguration {
    @BindToRegistry
    public LambdaEndpointRouteBuilder myRoute() {
        return rb -> rb.from(rb.kafka("cheese").clientId("myClient").batching(true))
                            .to(rb.jms("queue:foo"));
    }
}

LambdaEndpointRouteBuilder 提供了类型安全的端点,但在选择端点名称时需要加上实例名(rb)前缀。注意上文是如何选择 kafka 端点的。

仅 Java:使用带前缀的类型安全端点构建器

rb.from(rb.kafka("cheese"))

对于常规的 LambdaRouteBuilder,参数类型只是 String,因此不再需要 rb 前缀:

仅 Java:使用不带前缀的字符串型端点 URI

rb.from("kafka:cheese")

另一方面,类型安全的 Endpoint DSL 允许你的 Java IDE 显示可配置的可用选项。在本示例中,我们配置了 clientId 和批量处理相关选项。这一点非常有用,因为 Kafka 组件拥有 100 多个选项。

评论

登录后参与评论

正在加载评论…