diff --git a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/step/impl/HttpStepHandler.java b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/step/impl/HttpStepHandler.java index 6be45216..fc271c96 100644 --- a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/step/impl/HttpStepHandler.java +++ b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/step/impl/HttpStepHandler.java @@ -50,14 +50,14 @@ public class HttpStepHandler implements ApiStepHandler { private static final int RETRY_ATTEMPTS = 3; private static final Set DEFAULT_FORWARDED_HEADERS = Set.of( - "authorization", - "zt-auth-token", - "tenant-id", - "visit-tenant-id", - "visit-company-id", - "visit-company-name", - "visit-dept-id", - "visit-dept-name" + "authorization", + "zt-auth-token", + "tenant-id", + "visit-tenant-id", + "visit-company-id", + "visit-company-name", + "visit-dept-id", + "visit-dept-name" ); @Override @@ -112,8 +112,17 @@ public class HttpStepHandler implements ApiStepHandler { Map headerMap = resolveHeaders(stepDefinition, payload); Duration timeout = resolveTimeout(stepDefinition); WebClient client = webClientBuilder.build(); - WebClient.RequestHeadersSpec requestSpec = buildRequest(client, callSpec, requestPayload, headerMap, supportsBody); - Mono responseMono = requestSpec.retrieve().bodyToMono(Object.class); + final HttpRequestPayload resolvedPayload = requestPayload; + boolean finalSupportsBody = supportsBody; + Mono responseMono = Mono.defer(() -> { + // 每次订阅(含重试)都会重新构建请求,避免缓存第一次结果 + HttpRequestPayload payloadForAttempt = resolvedPayload == null + ? HttpRequestPayload.of(null, Collections.emptyMap()) + : resolvedPayload; + return buildRequest(client, callSpec, payloadForAttempt, headerMap, finalSupportsBody) + .retrieve() + .bodyToMono(Object.class); + }); responseMono = applyResilientRetry(responseMono, stepDefinition); Object response = timeout == null ? responseMono.block() : responseMono.block(timeout); payload.addStepResult(ApiStepResult.builder() @@ -353,12 +362,12 @@ public class HttpStepHandler implements ApiStepHandler { private record HttpRequestPayload(Object body, Map queryParams) { - private HttpRequestPayload { - Map safeQuery = queryParams == null - ? Collections.emptyMap() - : Collections.unmodifiableMap(new LinkedHashMap<>(queryParams)); - queryParams = safeQuery; - } + private HttpRequestPayload { + Map safeQuery = queryParams == null + ? Collections.emptyMap() + : Collections.unmodifiableMap(new LinkedHashMap<>(queryParams)); + queryParams = safeQuery; + } static HttpRequestPayload of(Object body, Map queryParams) { return new HttpRequestPayload(body, queryParams);