我有一个用例,我们通过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
答案 0 :(得分:1)
将分割器后的通道设为ExecutorChannel
;这样,只要所有拆分消息都被分派到执行程序,原始线程就会返回网关并等待回复。
请注意,dsl 1.0.0.RELEASE现已可用。
查看新的line-by-line DSL tutorial(咖啡馆演示中的第15行完全符合您的需求 - 添加ExecutorChannel
)。