这里是 Camel 2.11.0。我有以下 Camel 路线:
<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>
仅将交换广播到其下方列出的第一个子元素。 为什么以及如何解决这个问题?
最佳答案
关于java - Camel 组播不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21461075/