我正在使用AggregationStrategy来确保在oldExchange中填充了特定的标头... *一切正常...当前* ...当前代码为:
.enrich("direct:step1-processing", new AggregationStrategy() {<br/>
@Override<br/>
public Exchange aggregate(final Exchange oldExchange, <br/>
final Exchange newExchange) {<br/>
copyHeader(SomeBean.SpecificHeader_1, <br/>
newExchange, <br/>
oldExchange);<br/>
return oldExchange;<br/>
}<br/>
})
.enrich("direct:step2-processing", new AggregationStrategy() {<br/>
@Override<br/>
public Exchange aggregate(final Exchange oldExchange, <br/>
final Exchange newExchange) {<br/>
copyHeader(SomeBean.SpecificHeader_2, <br/>
newExchange, <br/>
oldExchange);<br/>
return oldExchange;<br/>
}<br/>
})
void copyHeader(final String headerName, <br/>
final Exchange newExchange, <br/>
final Exchange oldExchange) {<br/>
oldExchange.getIn().setHeader(
headerName, <br/>
newExchange.getIn().getHeader(headerName));<br/>
}
我的目标是将AggregationStrategy代码移到其自己的类中,而不是将代码内联。那本身不是问题,问题是如何传递该参数( SomeBean.SpecificHeader_1或SomeBean.SpecificHeader_2 ),该参数指定将哪个头值从旧交易所复制到新交易所。
据我所知,公共交易所聚合()方法不允许传入新旧交易所以外的参数。
答案 0 :(得分:0)
解决方案1:定义自己的策略
对于每个特定的标头,您可以有一个AggregationStrategy
的单独实例:
public class MyAggregationStrategy implements AggregationStrategy {
private String headerName;
public MyAggregationStrategy(String headerName) {
this.headerName = headerName;
}
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
copyHeader(newExchange, oldExchange);
return oldExchange;
}
void copyHeader(final Exchange newExchange,
final Exchange oldExchange) {
oldExchange.getIn().setHeader(
headerName,
newExchange.getIn().getHeader(headerName));
}
}
然后使用以下策略:
.enrich("direct:step1-processing", new MyAggregationStrategy(SomeBean.SpecificHeader_1))
.enrich("direct:step2-processing", new MyAggregationStrategy(SomeBean.SpecificHeader_2))
解决方案2:使用lambda的
稍微修改了您原来的copyHeaders()
方法:
Exchange copyHeader(final String headerName,
final Exchange newExchange,
final Exchange oldExchange) {
oldExchange.getIn().setHeader(
headerName,
newExchange.getIn().getHeader(headerName));
return oldExchange;
}
然后定义所需的策略:
AggregationStrategy header1Strategy = (oldExchange, newExchange) -> copyHeader("my-header-1", oldExchange, newExchange);
AggregationStrategy header2Strategy = (oldExchange, newExchange) -> copyHeader("my-header-2", oldExchange, newExchange);
最后使用它们:
.enrich("direct:step1-processing", header1Strategy)
.enrich("direct:step2-processing", header2Strategy);