Browse Source

聚类接口调整

master
luoweijian 5 days ago
parent
commit
f1a714e901
  1. 4
      src/main/java/com/project/interaction/config/WebClientConfig.java
  2. 6
      src/main/java/com/project/interaction/domain/dto/ClusterResultDTO.java
  3. 13
      src/main/java/com/project/interaction/domain/service/impl/PostToClusteringDomainServiceImpl.java

4
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))

6
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;
}

13
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()))
// 结果处理(非阻塞订阅)

Loading…
Cancel
Save