Spring integration Spring集成-将拆分器列表中的第一条消息路由回列表中的其他消息之前

Spring integration Spring集成-将拆分器列表中的第一条消息路由回列表中的其他消息之前,spring-integration,ibm-mq,spring-jms,Spring Integration,Ibm Mq,Spring Jms,我有一个用例,我们通过web服务接收有效负载,其中可能包含单个业务消息或多个业务消息 在我们的SI流程中,我们使用拆分器将接收到的有效负载分解为不同的业务消息(其中最多可能有5000条业务消息),如果有效负载包含多条业务消息,我们使用拆分器在拆分列表的开头还包括一条响应业务消息。拆分之后,我们有一个路由器将列表中的第一条消息(响应业务消息)路由到一个通道(response.ch),该通道作为响应流回到web服务端点,所有其他业务消息路由到另一个通道(request.jms.ch)流到JMSOut

我有一个用例,我们通过web服务接收有效负载,其中可能包含单个业务消息或多个业务消息

在我们的SI流程中,我们使用
拆分器
将接收到的有效负载分解为不同的业务消息(其中最多可能有5000条业务消息),如果有效负载包含多条业务消息,我们使用
拆分器
在拆分列表的开头还包括一条响应业务消息。拆分之后,我们有一个
路由器
将列表中的第一条消息(响应业务消息)路由到一个通道(
response.ch
),该通道作为响应流回到web服务
端点
,所有其他业务消息路由到另一个通道(
request.jms.ch
)流到
JMSOutboundAdapter
以传递到MQ队列以在其他地方处理

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

          ->       ->Splitter->Router->JmsOutboundAdapter (to MQ Queue)
WsEndpoint  Gateway                  |
          <-       <-----------------
干杯,
PM

使分离器后的通道成为执行通道;这样,一旦所有拆分消息都被分派给执行器,原始线程就会返回到网关并等待回复

请注意,现在可以使用


查看新的(cafe演示中的第15行完全满足您的需要-添加一个
ExecutorChannel
)。

这很好,Gary,谢谢。另外,我创建了具有固定线程池大小的执行器,然后在路由器上配置了一个轮询器,每100ms轮询n条消息。通过这种方式,我大致知道响应将作为100毫秒轮询中的n条消息之一快速发送。在这种情况下,您不需要轮询器/队列通道,仅使用
ExcutorChannel
就足够了。由于其他原因,该教程有一个下游队列通道。好的,我已经删除了路由器的轮询器配置,但给执行器留下了一个固定的线程池大小(相对于默认的缓存线程池)。在缓存的线程池上使用固定线程池(最大线程数很小)肯定会影响响应业务消息在其他业务消息上的处理速度。再次感谢你的帮助。
o.s.i:spring-integration-java-dsl:1.0.0.RC1
o.s.i:spring-integration-jms:4.0.4.RELEASE