我目前有一个入站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服务的内部调用在内部异步发生,以减少处理时间。
答案 0 :(得分:1)
考虑在rejection-policy="CALLER_RUNS"
上使用<task:executor>
。
问题可能在那些long-running
调用Web服务的情况下,如果您有超过10个并发任务,则所有其他任务将默认为ABROTED
。
答案 1 :(得分:0)
你需要添加一个<aggregator/>
来将结果组合成一个列表,然后添加一些变换器来构建结果中的响应;根据{{1}}。