具有聚合策略的Camel recipientList /多播

时间:2016-12-19 08:32:24

标签: java java-ee apache-camel

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"};
        }
    }
}

此处有效但聚合无法正常工作

1 个答案:

答案 0 :(得分:1)

我不确定multicast()如何与recipientList()交互,但后者已经支持多播/聚合和并行处理的概念。

所以,这样的事情应该有效:

from("direct:processRequest")
    .recipientList(header("myHeader"))
    .aggregationStrategy(aggregationStrategy)
    .parallelProcessing()
    .to("bean:transformerBean");

此外,如果您更喜欢使用@RecipientList注释,那么它还支持并行处理和aggregationStrategy的参数。