diff --git a/src/main/java/com/project/interaction/config/WebClientConfig.java b/src/main/java/com/project/interaction/config/WebClientConfig.java index 3d2be43..59a8bed 100644 --- a/src/main/java/com/project/interaction/config/WebClientConfig.java +++ b/src/main/java/com/project/interaction/config/WebClientConfig.java @@ -22,8 +22,8 @@ public class WebClientConfig { public WebClient algorithmWebClient() { // 配置HTTP客户端,设置长超时以支持流式响应 HttpClient httpClient = HttpClient.create() - .responseTimeout(Duration.ofSeconds(5)) - .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) + .responseTimeout(Duration.ofSeconds(30)) + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000) .doOnConnected(conn -> conn // 读超时 .addHandlerLast(new ReadTimeoutHandler(60, TimeUnit.SECONDS)) diff --git a/src/main/java/com/project/interaction/domain/dto/ClusterResultDTO.java b/src/main/java/com/project/interaction/domain/dto/ClusterResultDTO.java index 4ea0073..f1a4974 100644 --- a/src/main/java/com/project/interaction/domain/dto/ClusterResultDTO.java +++ b/src/main/java/com/project/interaction/domain/dto/ClusterResultDTO.java @@ -1,8 +1,14 @@ package com.project.interaction.domain.dto; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@JsonIgnoreProperties(ignoreUnknown = true) // 建议加上,防止算法端多传了字段导致报错 +@NoArgsConstructor // 必须有这个 + public class ClusterResultDTO { + private Integer code; private String message; } diff --git a/src/main/java/com/project/interaction/domain/service/impl/PostToClusteringDomainServiceImpl.java b/src/main/java/com/project/interaction/domain/service/impl/PostToClusteringDomainServiceImpl.java index 41e6d1e..b8bbc6f 100644 --- a/src/main/java/com/project/interaction/domain/service/impl/PostToClusteringDomainServiceImpl.java +++ b/src/main/java/com/project/interaction/domain/service/impl/PostToClusteringDomainServiceImpl.java @@ -1,5 +1,6 @@ package com.project.interaction.domain.service.impl; +import com.fasterxml.jackson.databind.ObjectMapper; import com.project.information.domain.dto.KnowledgePointDTO; import com.project.interaction.domain.dto.ClusterQueryDTO; import com.project.interaction.domain.dto.ClusterResultDTO; @@ -9,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; import java.util.Collections; import java.util.List; @@ -36,7 +38,16 @@ public class PostToClusteringDomainServiceImpl implements PostToClusteringDomain .uri(clusterUrl) .bodyValue(requestBody) .retrieve() - .bodyToMono(ClusterResultDTO.class)// 错误处理 + .bodyToMono(String.class) + .flatMap(jsonStr -> Mono.fromCallable(() -> { + ObjectMapper mapper = new ObjectMapper(); + // 第一次 readValue:去掉外层引号和转义符,把字符串变成正常的 JSON 格式 + // 此时 unescapedJson 的值会变成 {"code": 200, "message": "请求成功!"} + String unescapedJson = mapper.readValue(jsonStr, String.class); + + // 第二次 readValue:将标准的 JSON 字符串解析为 DTO + return mapper.readValue(unescapedJson, ClusterResultDTO.class); + })) .doOnError(error -> log.error(">>> [Interactor] 算法端推送异常, TaskId: {}, 原因: {}", taskId, error.getMessage())) // 结果处理(非阻塞订阅)