Spring Integration - 在List中的其他消息之前将拆分列表中的第一条消息路由回来

时间:2014-11-25 11:47:22

标签: spring-integration ibm-mq spring-jms

我有一个用例,我们通过Web服务接收有效负载,该服务可能包含单个业务消息或许多业务消息。

在我们的SI流程中,我们使用Splitter将收到的有效负载分解为不同的业务消息(最多可能有5000条业务消息),并且在有效负载包含多条业务消息的情况下,我们使用Splitter还可以在拆分列表的开头包含响应业务消息。在拆分之后,我们有Router将列表中的第一条消息(响应业务消息)路由到一个通道(response.ch),该通道将流回到Web服务Endpoint,响应以及所有其他业务消息到另一个通道(request.jms.ch),该通道流向JMSOutboundAdapter以传递到MQ队列以便在其他位置进行处理。

简化后,SI流看起来有点像这样:

          ->       ->Splitter->Router->JmsOutboundAdapter (to MQ Queue)
WsEndpoint  Gateway                  |
          <-       <-----------------

这里的想法是,在将所有其他细分的业务请求消息写入MQ队列之前,客户端会立即收到业务消息响应。

当我测试此流时,第一个响应业务消息放在response.ch频道中,然后所有其他业务消息开始放在request.jms.ch channel中(如预期的那样),但是{{1在其他业务消息开始写入MQ队列之前,Web服务Gateway不会获取响应消息...

任何想法为什么会这样?如何在拆分消息开始写入MQ队列之前确保将响应发送回客户端?

使用:

Endpoint

干杯, PM

1 个答案:

答案 0 :(得分:1)

将分割器后的通道设为ExecutorChannel;这样,只要所有拆分消息都被分派到执行程序,原始线程就会返回网关并等待回复。

请注意,dsl 1.0.0.RELEASE现已可用。

查看新的line-by-line DSL tutorial(咖啡馆演示中的第15行完全符合您的需求 - 添加ExecutorChannel)。