from("direct:processRequest").multicast(aggregationStrategy).parallelProcessing().
to("bean:abcService?method=getProductInfo",
"bean:xyzService?method=getProductInfo").end().
to("bean:transformerBean");
上述路线效果很好,但我想在to(..)
内使用动态网址。
结果我将路线修改为以下内容:
路线:
from("direct:processRequest").multicast(aggregationStrategy).parallelProcessing().
bean(RecipientListBean.class).end().
to("bean:transformerBean");
RecipientListBean.java:
@Component
public class RecipientListBean {
@RecipientList
public String[] route(@Header("countryCode") String countryCode) {
if (StringUtils.equalsIgnoreCase(countryCode, "IN")) {
return new String[]{"bean:xyzService?method=getProductInfo",
"bean:abcService?method=getProductInfo"};
} else {
return new String[]{"bean:xyzService?method=getProductInfo"};
}
}
}
此处有效但聚合无法正常工作。
答案 0 :(得分:1)
我不确定multicast()如何与recipientList()交互,但后者已经支持多播/聚合和并行处理的概念。
所以,这样的事情应该有效:
from("direct:processRequest")
.recipientList(header("myHeader"))
.aggregationStrategy(aggregationStrategy)
.parallelProcessing()
.to("bean:transformerBean");
此外,如果您更喜欢使用@RecipientList注释,那么它还支持并行处理和aggregationStrategy的参数。