Java Spring集成异步通信同步响应

Java Spring集成异步通信同步响应,java,multithreading,spring,asynchronous,spring-integration,Java,Multithreading,Spring,Asynchronous,Spring Integration,我目前有一个入站https网关。在http网关请求的内部处理中,我调用多个http web服务。当前,当我从调试点进行监控时,如果我从发布-订阅通道调用4个web服务,它们将一个接一个地执行。然后,在逐个调用4个服务之后,它们被聚合并返回响应。这里的问题是可能有N个调用,因此本质上只能有2个http web服务调用,甚至可能有100个。为了解决这个问题,我向publish subsce通道添加了一个任务执行器,如下所示 <int:publish-subscribe-channel id="

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

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

<task:executor id="pool" pool-size="10"/>
我得到了一个要下载的响应json字符串,而不是作为响应显示在浏览器中


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

请考虑在
上使用
拒绝策略=“CALLER\u RUNS”


问题可能在于那些长时间运行的
web服务调用,如果您有10个以上的并发任务,则默认情况下所有其他任务都将被删除。

您需要添加一个以将结果合并到一个列表中,然后添加一些转换器以根据结果构造响应;根据
回复超时

,原始http线程将等待结果。另一个注意事项是,每个http请求最多有10个并发任务吗?或者,如果我得到20个并发的入站http请求,它们总共必须使用10个线程的同一线程池,那么我如何使每个任务执行者有10个线程,或者在这种情况下,选择线程池号的最佳实践或指导原则是什么。除此之外,当整个线程池用完时,如何防止其他执行尝试被中止,而是让它们强制线程池释放,请参见我的答案:
rejection policy=“CALLER\u RUNS”
是最好的折衷办法。无论如何,根据输入请求来调整拉的大小是不好的。CPU和并发线程之间应该存在有益的折衷。
Reply message received but the receiving thread has already received a reply