在我的用例中,最简单的集成组件安排是什么:
到目前为止(第1点和第2点),我正在使用聚合器,但不知道是否有解决问题的解决方案在3.) - 或者我将不得不尝试转换每个消息和检查对象的类型是否为class1 - 然后使用correlationstrategy someId,如果是class2,则使用otherId。
对于问题4.) - 我可以手动编写代码 - 但是Transformer似乎是一个很好用的组件,我只是不知道是否有类似聚合变换器的东西,我可以为每个输入类型指定映射规则。 / p>
更新
这样的事情:
class One{
public String getA(){ return "1"; }
}
class Two{
public Integer getB(){ return 1; }
}
class ReduceTo{
public void setId(Integer id){}
public void setOne(One one){}
public void setTwo(Two two){}
}
public class ReducingAggregator {
@CorrelationStrategyMethod
public String strategy(One one){
return one.getA();
}
@CorrelationStrategyMethod
public String strategy(Two two){
return two.getB().toString();
}
@AggregatorMethod
public void reduce(ReduceTo out, One in){
out.setId(Integer.valueOf(in.getA()));
out.setOne(in);
}
@AggregatorMethod
public void reduce(ReduceTo out, Two in){
out.setId(in.getB());
out.setTwo(in);
}
}
我认为,注释具有与当前春季不同的用例。 RediceTo可以是包括集合在内的任何对象。在配置中,我们可以指定何时第一次传递它应该是空列表还是别的东西(比如java流中的reduce)。
答案 0 :(得分:1)
不确定您希望将其视为开箱即用的解决方案。那是你的课程,所以你的方法。框架如何对它们做出决定?
嗯,是的,您需要实施CorrelationStrategy
。或者您可以考虑使用ExpressionEvaluatingCorrelationStrategy
并且不要编写Java代码:-)。
请详细说明您希望看到的开箱即用功能。
aggregating transformer
完全封装在聚合器的MessageGroupProcessor
函数中。默认情况下为DefaultAggregatingMessageGroupProcessor
。是的,您可以编写自己的代码或再次代码 - 使用ExpressionEvaluatingMessageGroupProcessor
并且不要再次编写Java代码: - )