gpt4 book ai didi

java - Spring Integration - 聚合和转换

转载 作者:行者123 更新时间:2023-11-30 06:24:41 25 4
gpt4 key购买 nike

我的用例中最简单的集成组件排列是什么:

  1. 从多个来源接收多种格式的消息(所有消息都是 JSON 序列化对象)。
  2. 在缓冲区中存储消息最多 10 秒(总计)
  3. 按不同的类属性 getter 对消息进行分组(例如 class1.someId()、class2.otherId()...)
  4. 释放所有已分组的消息并转换为新的聚合消息。

到目前为止(第 1 点和第 2 点),我正在使用聚合器,但不知道是否有针对第 3 点问题的现成解决方案。) - 或者我将不得不尝试转换每条消息并检查对象的类型是否为 class1 - 然后使用相关策略 someId,如果为 class2,则使用 otherId。

对于问题 4.) - 我可以手动编写一些代码 - 但 Transformer 似乎是一个很好用的组件,我只是不知道是否有类似聚合变压器的东西,我可以在其中为每种输入类型指定映射规则。

更新

类似这样的事情:

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

我认为,注释的用例与当前的 spring 注释不同。 RediceTo 可以是任何对象,包括集合。在配置中,我们可以指定第一次传递时它应该是空列表还是其他内容(例如java流中的reduce)。

最佳答案

不确定您希望看到什么开箱即用的解决方案。这就是你的类,所以你的方法。 Framework 如何对它们做出一些决定?

嗯,是的,您需要实现CorrelationStrategy。或者您可以考虑使用 ExpressionEvaluatingCorrelationStrategy 并且不编写 Java 代码:-)。

请详细说明您希望看到的开箱即用功能。

聚合转换器完全封装在聚合器的MessageGroupProcessor函数中。默认情况下它是DefaultAggregatingMessageGroupProcessor。是的,您可以自己编写代码,也可以再次编写代码 - 使用 ExpressionEvaluatingMessageGroupProcessor 并且不要再次编写 Java 代码:-)

关于java - Spring Integration - 聚合和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47444912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com