Camel使用多个from()定义RouteDefinition

it2024-10-24  43

Camel使用多个from定义RouteDefinition

1. 使用多个from创建路由2. 使用一个from创建多消费者的路由3. 多个from之间插入其他处理情形下的处理逻辑参考

该方法是基于Camel Version 2.20.1。新版本已经不支持在一个路由中使用多个from。

1. 使用多个from创建路由

在一个RouteDefinition里可以定义多个from(),相当于创建多个消费者。

示例:创建一个路由,消费三个阻塞队列a, b, c的消息,并将消息内容输出到日志。

public class MultiFromRouteTest extends CamelTestSupport { @Test public void testMultiFrom() { template.sendBody("seda:a", "a"); template.sendBody("seda:b", "b"); template.sendBody("seda:c", "c"); template.sendBody("seda:c", "cccc"); } @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @Override public void configure() throws Exception { from("seda:a") .from("seda:b") .from("seda:c") .log("receive message body ${body}"); } }; } }

执行结果

2. 使用一个from创建多消费者的路由

可以使用一个from多个参数的形式实现上述功能,其路由定义如下:

@Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @Override public void configure() throws Exception { from("seda:a", "seda:b", "seda:c").log("receive message body ${body}"); } }; }

3. 多个from之间插入其他处理情形下的处理逻辑

如果在多个from()处理之间加入了其他处理,这些处理将作用于所有的from()。

下面的例子在 1. 的基础上稍微做了改造,在from(“seda:b”)后增加了日志输出处理,该日志输出同样适用于from(“seda:c”)。

public class MultiFromRouteTest extends CamelTestSupport { @Test public void testMultiFrom() throws InterruptedException { template.sendBody("seda:a", "a"); template.sendBody("seda:b", "b"); template.sendBody("seda:c", "c"); template.sendBody("seda:c", "cccc"); } @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @Override public void configure() throws Exception { from("seda:a").from("seda:b") .log("receive message body ${body}") .from("seda:c") .log("receive message body ${body}"); } }; } }

执行结果:阻塞队列 c 中的消息也被输出了2次。

参考

Is it possible to define a Camel route with multiple from(), i.e. consume from multiple endpoints?

最新回复(0)