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

使用Java AsyncHttpClient调用服务时遇'SslHandler removed before handshake completed'错误

问题分析与解决方案

异常原因

你遇到的SslHandler removed before handshake completed异常,核心原因是连接超时设置过短:你把setConnectTimeout(100)设为100毫秒,而SSL握手需要完成证书验证、密钥交换等步骤,这个过程所需时间远超过100ms,导致握手还没完成就被客户端强制断开,进而触发该异常。

另外你的代码存在冗余问题:重复创建了AsyncHttpClient实例(两次调用Dsl.asyncHttpClient(clientBuilder)),这会浪费资源,也可能引发不必要的连接问题。

修复步骤

1. 调大连接超时时间

将连接超时调整到合理范围,比如3000ms(3秒),给SSL握手足够的完成时间:

DefaultAsyncHttpClientConfig.Builder clientBuilder = Dsl.config()
        .setConnectTimeout(3000) // 调整为3000ms,可根据实际网络情况调整
        .setKeepAlive(true)
        .setSslContext(sslContext);

2. 复用AsyncHttpClient实例

不要重复创建客户端实例,创建一次后复用:

// 仅创建一次客户端实例
AsyncHttpClient client = Dsl.asyncHttpClient(clientBuilder);

// 后续请求复用该客户端
BoundRequestBuilder postRequest = client.preparePost(BASE_URL)
        .addHeader("Content-Type", "application/json")
        .addHeader("x-api-key", transactionKey)
        .addHeader("Cache-Control", "no-cache")
        .setBody(reqObj);

ListenableFuture<Response> responseFuture = postRequest.execute();

3. 验证SSL上下文配置

确保你的sslContext配置正确:

  • 如果目标服务使用自签名证书,需将证书添加到信任管理器中
  • 检查SSL上下文的密钥库/信任库配置是否正确,避免因证书验证失败间接导致握手超时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:45:33