diff --git a/pom.xml b/pom.xml index d86f6f4..7428a99 100644 --- a/pom.xml +++ b/pom.xml @@ -19,19 +19,19 @@ com.inspect.simulator.InspectSimulatorApplication - - - - - - - - + + + + + + + + - - org.springframework.boot - spring-boot-starter-web - + + org.springframework.boot + spring-boot-starter-web + org.springframework.cloud spring-cloud-starter-bootstrap @@ -43,24 +43,24 @@ ${nacos.client.version} - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-discovery - ${spring.cloud.alibaba.version} - - - com.alibaba.nacos - nacos-api - - - com.alibaba.nacos - nacos-client - - - com.alibaba.nacos - nacos-common - - - + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + ${spring.cloud.alibaba.version} + + + com.alibaba.nacos + nacos-api + + + com.alibaba.nacos + nacos-client + + + com.alibaba.nacos + nacos-common + + + org.springframework.cloud spring-cloud-dependencies @@ -68,21 +68,21 @@ pom import - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-config - ${spring.cloud.alibaba.version} - - - com.alibaba.cloud - spring-cloud-starter-alibaba-sentinel - ${spring.cloud.alibaba.version} - - - com.alibaba.cloud - spring-cloud-alibaba-sentinel-gateway - ${spring.cloud.alibaba.version} - + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + ${spring.cloud.alibaba.version} + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + ${spring.cloud.alibaba.version} + + + com.alibaba.cloud + spring-cloud-alibaba-sentinel-gateway + ${spring.cloud.alibaba.version} + org.springframework.boot @@ -171,11 +171,11 @@ 1.0.0 compile - - - - - + + + + + org.springframework.boot @@ -245,7 +245,6 @@ - org.openpnp @@ -279,6 +278,12 @@ 2.11.0 + + + org.springframework.boot + spring-boot-starter-webflux + + diff --git a/src/main/java/com/inspect/simulator/utils/http/WebClientConfig.java b/src/main/java/com/inspect/simulator/utils/http/WebClientConfig.java new file mode 100644 index 0000000..9f94323 --- /dev/null +++ b/src/main/java/com/inspect/simulator/utils/http/WebClientConfig.java @@ -0,0 +1,25 @@ +package com.inspect.simulator.utils.http; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.reactive.ReactorClientHttpConnector; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.netty.http.client.HttpClient; + +import java.time.Duration; + +@Configuration +public class WebClientConfig { + + @Bean + public WebClient webClient() { + // 配置 HttpClient:连接超时、响应超时 + HttpClient httpClient = HttpClient.create() + .responseTimeout(Duration.ofSeconds(30)); // 响应超时 + + return WebClient.builder() + .clientConnector(new ReactorClientHttpConnector(httpClient)) + .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(1024 * 1024 * 10)) // 设置最大内存限制为10MB + .build(); + } +} diff --git a/src/main/java/com/inspect/simulator/utils/http/WebClientUtil.java b/src/main/java/com/inspect/simulator/utils/http/WebClientUtil.java new file mode 100644 index 0000000..1fc21fd --- /dev/null +++ b/src/main/java/com/inspect/simulator/utils/http/WebClientUtil.java @@ -0,0 +1,101 @@ +package com.inspect.simulator.utils.http; + +import com.alibaba.fastjson.JSONObject; +import com.inspect.simulator.constant.Color; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; + +import java.util.Map; + +@Slf4j +@Service +public class WebClientUtil { + + @Autowired + private WebClient webClient; + + public WebClient.RequestBodySpec http(HttpMethod httpMethod, String uri) { + log.info(Color.MAGENTA + "[WebClient] address: {} " + Color.END, uri); + assert StringUtils.isNotBlank(uri); + assert webClient != null; + return webClient.method(httpMethod).uri(uri); + } + + public T get(String uri, Class clazz, Map headerMap) { + JSONObject result = http(HttpMethod.GET, uri) + .headers(httpHeaders -> { + headerMap.forEach((k, v) -> { + httpHeaders.add(k, v); + }); + }) + .retrieve() + .bodyToMono(JSONObject.class) + .block(); + log.info("[WebClient] get, RES:{}", result.toJSONString()); + return this.checkResultCodeAndConvertResult(uri, result, clazz); + } + + public T getJson(String uri, Class clazz) { + JSONObject result = http(HttpMethod.GET, uri) + .contentType(MediaType.APPLICATION_JSON).retrieve().bodyToMono(JSONObject.class).block(); + log.info("[WebClient] getJson, RES:{}", result.toJSONString()); + return this.checkResultCodeAndConvertResult(uri, result, clazz); + } + + public JSONObject getResultJson(String uri) { + JSONObject result = http(HttpMethod.GET, uri) + .retrieve() + .bodyToMono(JSONObject.class) + .block(); + + return result; + } + + public T putJson(Object requestParam, String uri, Class clazz) { + JSONObject t = http(HttpMethod.PUT, uri) + .contentType(MediaType.APPLICATION_JSON) + .bodyValue(requestParam) + .retrieve() + .bodyToMono(JSONObject.class) + .block(); + + log.debug("[WebClient] putJson, PARAM: {}, RES: {}", JSONObject.toJSONString(requestParam), t.toJSONString()); + return checkResultCodeAndConvertResult(uri, t, clazz); + } + + public T postJson(Object requestParam, String uri, Class clazz, Map headerMap) { + JSONObject result = http(HttpMethod.POST, uri) + .contentType(MediaType.APPLICATION_JSON) + .headers(httpHeaders -> { + headerMap.forEach((k, v) -> { + httpHeaders.add(k, v); + }); + }) + .bodyValue(requestParam).retrieve() + .bodyToMono(JSONObject.class) + .block(); + log.info("[WebClient] postJson, PARAM:{}, RES:{}", JSONObject.toJSONString(requestParam), result.toJSONString()); + return checkResultCodeAndConvertResult(uri, result, clazz); + } + + public T delete(String uri, Class clazz) { + JSONObject result = http(HttpMethod.DELETE, uri) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .retrieve() + .bodyToMono(JSONObject.class) + .block(); + return checkResultCodeAndConvertResult(uri, result, clazz); + } + + private T checkResultCodeAndConvertResult(final String uri, JSONObject result, Class clazz) { + log.info("CHECK_RET, URI: {}, RES: {}", uri, result.toJSONString()); + + return result.toJavaObject(clazz); + } + +}