gpt4 book ai didi

Spring Integration Splitter 将键映射到不同的 channel

转载 作者:行者123 更新时间:2023-12-02 09:54:18 25 4
gpt4 key购买 nike

我有一个转换器,它返回一个 Map 作为结果。然后将该结果放入输出 channel 。我想做的是为 map 中的每个键进入不同的 channel 。我如何在 Spring Integration 中配置它?

例如

变压器 -- 产生 --> map

map 包含{(Key1, "一些数据"), (Key2, "一些数据")}

所以对于 Key1 --> 转到 channel 1所以对于 Key2 --> 转到 channel 2等等..

代码示例会很有帮助。

提前致谢总经理

最佳答案

您的处理应包含两个步骤:

  1. 将消息划分为单独处理的单独部分,
  2. 将单独的消息(拆分结果)路由到适当的 channel 。

对于第一个任务,您必须使用拆分器,而对于第二个任务,您必须使用路由器( header 值路由器最适合这里)。

请在下面找到示例 Spring Integration 配置。您可能想在链的末端使用聚合器来组合消息 - 我将其留给您自行决定。

<channel id="inputChannel">

<!-- splitting message into separate parts -->
<splitter id="messageSplitter" input-channel="inputChannel" method="split"
output-channel="routingChannel">
<beans:bean class="com.stackoverflow.MapSplitter"/>
</spliter>

<channel id="routingChannel">

<!-- routing messages into appropriate channels basis on header value -->

<header-value-router input-channel="routingChannel" header-name="routingHeader">
<mapping value="someHeaderValue1" channel="someChannel1" />
<mapping value="someHeaderValue2" channel="someChannel2" />
</header-value-router>

<channel id="someChannel1" />
<channel id="someChannel2" />

还有分离器:

public final class MapSplitter {

public static final String ROUTING_HEADER_NAME = "routingHeader";

public List<Message<SomeData>> split(final Message<Map<Key, SomeData>> map) {
List<Message<SomeData>> result = new LinkedList<>();

for(Entry<Key, SomeData> entry : map.entrySet()) {
final Message<SomeData> message = new MessageBuilder()
.withPayload(entry.getValue())
.setHeader(ROUTING_HEADER_NAME, entry.getKey())
.build();
result.add(message);
}

return result;
}
}

关于Spring Integration Splitter 将键映射到不同的 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514775/

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