LambdaRouteBuilder
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 多个选项。
评论
登录后参与评论
KnowForge