首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >弹簧集成异步通信同步响应

弹簧集成异步通信同步响应
EN

Stack Overflow用户
提问于 2014-10-24 13:54:28
回答 2查看 1.2K关注 0票数 0

我目前有一个入站https网关。在内部处理来自http网关的请求时,我调用多个http服务。目前,正如我从调试点监测到的那样,如果我从发布订阅通道调用4个web服务,它们将被一个接一个地执行。然后,在4个服务被一个接一个地调用之后,它们被聚合并返回一个响应。这里的问题是,可能有N个调用,所以本质上只能有2个http服务调用,甚至可能有100个调用。为了解决这个问题,我在发布子程序通道中添加了一个任务执行器,如下所示

代码语言:javascript
运行
复制
<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入站网关停止正常工作,也就是说,我得到以下错误消息

代码语言:javascript
运行
复制
Reply message received but the receiving thread has already received a reply

我得到一个响应json字符串来下载,而不是作为响应显示在浏览器中。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-24 14:05:46

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

问题可能是在那些long-running调用的web服务,如果您有10个以上的并发任务,所有其他将默认为ABROTED

票数 1
EN

Stack Overflow用户

发布于 2014-10-24 14:29:41

您需要添加一个<aggregator/>来将结果组合到一个列表中,并添加一些转换器来根据结果构造响应;根据reply-timeout,原始的http线程将等待结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26549338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档