You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mule 4中HTTP POST请求出现"Remotely closed"错误求助

问题分析与解决方案

针对CloudHub中通过DLB调用系统API时出现的"Remotely closed"错误,核心原因是多层超时配置不匹配、空闲连接被DLB提前回收,结合你的环境参数和配置,给出以下针对性调整方案:


1. 对齐全链路空闲超时配置

当前DLB超时7分钟(420000ms),系统API监听器连接空闲超时仅6分钟(360000ms),流程API的connectionIdleTimeout未明确值,三者超时不一致会导致DLB或系统API提前断开空闲连接。

调整建议:

  • 流程API请求连接:将${awsSysApi.idletTimeout}设置为400000ms(略小于DLB超时),避免被DLB优先回收
  • 系统API监听器:修改connectionIdleTimeout为420000ms(与DLB超时一致),同时调大readTimeout至400000ms(覆盖大Payload的处理时间)

修改后的系统API监听器配置:

<http:listener-connection host="${http.host}" port="${http.private.port}" readTimeout="400000" connectionIdleTimeout="420000">
    <reconnection>
        <reconnect frequency="30000" count="2" />
    </reconnection>
</http:listener-connection>

2. 禁用连接复用,避免回收连接被重复使用

DLB会自动回收空闲连接,若流程API复用已被回收的连接,会触发"Remotely closed"。强制每次请求新建连接可解决此问题:

在流程API的HTTP请求配置中添加连接池配置,设置maxIdle为0:

<http:request-config name="Aws_Sys_API_HTTP_Request_configuration" doc:name="HTTP Request configuration" doc:id="5a7eb30f-9850-4de5-8cca-a7d77b0c10d4" basePath="${awsSysApi.basepath}">
    <http:request-connection host="${awsSysApi.host}" port="${awsSysApi.port}" protocol="HTTPS" connectionIdleTimeout="${awsSysApi.idletTimeout}">
        <reconnection>
            <reconnect frequency="${retry.millisecondsBetweenRetries}" count="${retry.maxRetries}" />
        </reconnection>
        <http:connection-pool maxIdle="0" /> <!-- 禁用空闲连接复用 -->
        <tls:context>
            <tls:trust-store insecure="true" />
            <tls:key-store type="jks" path="${tls.keyStore.path}" keyPassword="${secure::tls.keyStore.keyPassword}" password="${secure::tls.keyStore.password}" />
        </tls:context>
    </http:request-connection>
</http:request-config>

3. 调整请求响应超时,匹配DLB限制

当前流程API请求的responseTimeout为10分钟(600000ms),远大于DLB的7分钟超时,会导致DLB断开连接后请求仍在等待响应,触发错误。

将流程API请求的responseTimeout修改为400000ms:

<http:request method="POST" doc:name="POST GZIP / aws system api" doc:id="0b490747-5069-4546-9446-8b77130ae848" config-ref="Aws_Sys_API_HTTP_Request_configuration" path="${awsSysApi.databricksPath}" responseTimeout="400000">
    <!-- 其余配置保持不变 -->
</http:request>

4. 优化大Payload传输

30MB的GZIP Payload可能导致传输过程中连接长时间无数据交互,触发空闲超时。添加分块传输头,避免一次性发送完整Payload:

在流程API的请求头中添加Transfer-Encoding: chunked:

<http:headers><![CDATA[#[output application/java
---
{
    "client_secret" : p('secure::awsSysApi.client_secret'),
    "Content-Type" : "application/gzip",
    "client_id" : p('secure::awsSysApi.client_id'),
    "Transfer-Encoding" : "chunked"
}]]]></http:headers>

5. 验证DLB的TCP层超时

部分负载均衡除了应用层超时,还存在TCP层面的空闲超时(如部分LB的TCP超时默认350秒),需确认DLB的TCP超时设置,确保与应用层超时对齐。若TCP超时小于DLB的7分钟,需联系MuleSoft支持调整。


内容的提问来源于stack exchange,提问作者joono

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:20:25