Spring集成拆分器将关键点映射到不同的通道

Spring集成拆分器将关键点映射到不同的通道,spring,spring-integration,Spring,Spring Integration,我有一个转换器,它返回一个映射作为结果。然后将该结果传送到输出通道。我想做的是为地图中的每个键转到不同的通道。如何在Spring集成中配置此功能 e、 g Transformer--生成-->映射 映射包含{(键1,“一些数据”),(键2,“一些数据”)} 因此,对于键1-->转到通道1 因此,对于键2-->转到通道2 等等 代码示例会很有帮助 提前谢谢 GM您的处理应包括两个步骤: 将消息划分为独立处理的独立部分 将单独的消息(拆分的结果)路由到适当的通道中 对于第一个任务,您必须使用拆分器,

我有一个转换器,它返回一个映射作为结果。然后将该结果传送到输出通道。我想做的是为地图中的每个键转到不同的通道。如何在Spring集成中配置此功能

e、 g

Transformer--生成-->映射

映射包含{(键1,“一些数据”),(键2,“一些数据”)}

因此,对于键1-->转到通道1 因此,对于键2-->转到通道2 等等

代码示例会很有帮助

提前谢谢
GM

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

  • 将消息划分为独立处理的独立部分
  • 将单独的消息(拆分的结果)路由到适当的通道中
  • 对于第一个任务,您必须使用拆分器,对于第二个单路由器(头值路由器最适合这里)

    请在下面找到Spring集成配置示例。您可能希望在链的末端使用聚合器来合并消息-我将由您自行决定

    <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;
      } 
    }
    
    公共最终类映射拆分器{
    公共静态最终字符串路由\u标头\u NAME=“routingHeader”;
    公共列表拆分(最终消息映射){
    列表结果=新建LinkedList();
    for(条目:map.entrySet()){
    最终消息消息=新消息生成器()
    .withPayload(entry.getValue())
    .setHeader(路由\头\名称,entry.getKey())
    .build();
    结果。添加(消息);
    }
    返回结果;
    } 
    }
    
    Hi Piotrek,谢谢你的回复,我会尝试一下。不客气;)如果这种方法有任何问题,请告诉我——我直接将其写入堆栈溢出,因此可能会遗漏一些内容。