我目前有一个入站https网关。在内部处理来自http网关的请求时,我调用多个http服务。目前,正如我从调试点监测到的那样,如果我从发布订阅通道调用4个web服务,它们将被一个接一个地执行。然后,在4个服务被一个接一个地调用之后,它们被聚合并返回一个响应。这里的问题是,可能有N个调用,所以本质上只能有2个http服务调用,甚至可能有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字符串来下载,而不是作为响应显示在浏览器中。
如何异步调用多个外部web服务并向http入站网关发送聚合响应。因此,当整个http入站网关请求同步发生时,多个外部web服务的调用在内部异步进行,以减少处理时间。
发布于 2014-10-24 14:05:46
考虑在您的rejection-policy="CALLER_RUNS"
上使用<task:executor>
。
问题可能是在那些long-running
调用的web服务,如果您有10个以上的并发任务,所有其他将默认为ABROTED
。
发布于 2014-10-24 14:29:41
您需要添加一个<aggregator/>
来将结果组合到一个列表中,并添加一些转换器来根据结果构造响应;根据reply-timeout
,原始的http线程将等待结果。
https://stackoverflow.com/questions/26549338
复制相似问题