该方法是基于Camel Version 2.20.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}"); } }; } }执行结果
可以使用一个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}"); } }; }如果在多个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?