From 26d45b0e35f23e076e60714dff37a89810def493 Mon Sep 17 00:00:00 2001 From: matevip Date: Tue, 14 Apr 2026 17:53:44 +0800 Subject: [PATCH] fix(agent): use JdkClientHttpRequestFactory for LLM RestClient (gzip + HTTP/2) --- .../java/vip/mate/agent/AgentGraphBuilder.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/mateclaw-server/src/main/java/vip/mate/agent/AgentGraphBuilder.java b/mateclaw-server/src/main/java/vip/mate/agent/AgentGraphBuilder.java index 095d6852..7a25d007 100644 --- a/mateclaw-server/src/main/java/vip/mate/agent/AgentGraphBuilder.java +++ b/mateclaw-server/src/main/java/vip/mate/agent/AgentGraphBuilder.java @@ -33,8 +33,9 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; -import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.http.client.JdkClientHttpRequestFactory; import org.springframework.web.client.RestClient; +import java.net.http.HttpClient; import java.time.Duration; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientResponseException; @@ -1282,12 +1283,23 @@ public class AgentGraphBuilder { /** * RFC-012 M1:给 LLM 调用走的 RestClient 显式配置超时,避免 socket 永久挂起等待。 *

+ * 使用 {@link JdkClientHttpRequestFactory}(基于 Java 11+ {@link HttpClient}),原因: + *

+ *

* connectTimeout=10s(任何 LLM 提供方都不该超过这个建立连接时间); * readTimeout=180s(覆盖 nginx 60s 网关超时 + 留足真实长响应余量;超时后由上层 retry 接管)。 */ private RestClient.Builder applyHttpTimeouts(RestClient.Builder builder) { - SimpleClientHttpRequestFactory rf = new SimpleClientHttpRequestFactory(); - rf.setConnectTimeout(Duration.ofSeconds(10)); + HttpClient httpClient = HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(10)) + .build(); + JdkClientHttpRequestFactory rf = new JdkClientHttpRequestFactory(httpClient); rf.setReadTimeout(Duration.ofSeconds(180)); return builder.requestFactory(rf); }