Spring集成异步通信同步响应

时间:2014-10-24 13:54:28

标签: java multithreading spring asynchronous spring-integration

我目前有一个入站https网关。在来自http网关的请求的内部处理中,我调用多个http Web服务。目前,当我从调试点监视我是否从发布 - 订阅频道调用4个Web服务时,它们将一个接一个地执行。然后,在逐个调用其中4个服务之后,它们将被聚合并返回响应。这里的问题是有可能是N个呼叫,所以基本上只能有2个http Web服务调用,甚至可能有100个。为了解决这个问题,我在发布子系统通道中添加了一个任务执行器,如下

<int:publish-subscribe-channel id="ta-htl-data-router-channel" apply-sequence="true" task-executor="pool" />

<task:executor id="pool" pool-size="10"/>

然后,当同步执行Web路由器通道订户时,http入站网关停止正常工作,即我收到以下错误消息

Reply message received but the receiving thread has already received a reply

我得到一个响应json字符串TO DOWNLOAD而不是在浏览器中显示为响应。

如何异步调用多个外部Web服务并将聚合响应发送到http入站网关。因此,当响应的整体http入站网关请求同步发生时,多个外部Web服务的内部调用在内部异步发生,以减少处理时间。

2 个答案:

答案 0 :(得分:1)

考虑在rejection-policy="CALLER_RUNS"上使用<task:executor>

问题可能在那些long-running调用Web服务的情况下,如果您有超过10个并发任务,则所有其他任务将默认为ABROTED

答案 1 :(得分:0)

你需要添加一个<aggregator/>来将结果组合成一个列表,然后添加一些变换器来构建结果中的响应;根据{{​​1}}。

,原始的http线程将等待结果