java Camel多播不起作用
骆驼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...
因为我们在这里进行多播,我希望它也包括拒绝者的输出,看起来像:
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>
只将交换广播给它下面列出的第一个子元素为什么,我该如何解决这个问题
# 1 楼答案
multicast肯定会发送到所有端点。。。我不知道为什么它不是基于你的例子
看看这些基本上做相同事情的单元测试:
https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastTest.java
使用这条路线的是:
https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicast.xml
# 2 楼答案
我测试了你的路线,一切正常:
这个日志
和
这个日志
也许,你读错了骆驼配置