【发布时间】:2014-02-01 03:47:38
【问题描述】:
这里是骆驼 2.11.0。我有以下骆驼路线:
<route id="main-route">
<from uri="timer://runOnce?repeatCount=1&delay=10" />
<to uri="bean:loggingBean?method=main" />
<to uri="bean:processorBean?method=doSomething" />
<to uri="bean:loggingBean?method=afterProcessing" />
<multicast>
<to uri="direct:validator" />
<to uri="direct:rejector" />
</multicast>
</route>
<route id="validator-route">
<from uri="direct:validator" />
<to uri="bean:loggingBean?method=validator" />
</route>
<route id="rejector-route">
<from uri="direct:rejector" />
<to uri="bean:loggingBean?method=rejector" />
</route>
...loggingBean 的样子:
public class LoggingBean {
public void main(Exchange e) {
System.out.println("Starting main route...");
}
public void afterProcessing(Exchange e) {
System.out.println("Processing input...");
}
public void validator(Exchange e) {
System.out.println("In validator route...");
}
public void rejector(Exchange e) {
System.out.println("In rejector route...");
}
}
当我运行这段代码时,我得到以下控制台输出:
Starting main route...
Processing input...
In validator route...
因为我们在这里是 multi-casting,所以我希望它还包括拒绝器的输出,看起来像:
Starting main route...
Processing input...
In validator route...
In rejector route...
因此,Multicaster 似乎只发送到嵌套在其中的第一个元素(在 Spring XML 中),而不是第二个。嗯,有趣。因此,我将<multicast> 元素更改为如下所示:
<multicast>
<to uri="direct:rejector" />
<to uri="direct:validator" />
</multicast>
这一次,控制台输出如下:
Starting main route...
Processing input...
In rejector route...
所以这得到了证实:<multicast> 只是将交换广播到它下面列出的第一个子元素。 为什么,我该如何解决?
【问题讨论】:
-
您想同时发送给两者,您应该更改为异步通道。如果第一个频道出错,我不知道多播中会发生什么
-
我会尝试升级到 2.11 发布分支 (2.11.2) 的最新稳定版本,然后重试。
标签: java apache-camel routes multicast