Spring Integration Splitter Map键到不同的通道

use*_*337 5 spring spring-integration

我有一个变换器,它返回一个Map作为结果.然后将该结果放到输出通道上.我想要做的是为地图中的每个KEY转到不同的频道.如何在Spring Integration中配置它?

例如

变压器 - 生产 - >地图

地图包含{(Key1,"某些数据"),(Key2,"某些数据")}

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

代码示例会很有帮助.

在此先感谢GM

omn*_*nom 3

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

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

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

请在下面找到示例 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" />
Run Code Online (Sandbox Code Playgroud)

和分离器:

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;
  } 
}
Run Code Online (Sandbox Code Playgroud)