This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit 9da36ad1f8c136abf1712f3adabd6b46b22a8299 Author: liubao68 <[email protected]> AuthorDate: Fri Aug 27 17:12:26 2021 +0800 [SCB-2323]fix CommonHttpEdgeDispatcher request already write problem --- .../edge/core/CommonHttpEdgeDispatcher.java | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java index 2797c69..c3e02f7 100644 --- a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java +++ b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java @@ -46,7 +46,6 @@ import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpClient; -import io.vertx.core.http.HttpClientResponse; import io.vertx.core.http.RequestOptions; import io.vertx.ext.web.Router; import io.vertx.ext.web.RoutingContext; @@ -159,20 +158,20 @@ public class CommonHttpEdgeDispatcher extends AbstractEdgeDispatcher { httpClient = HttpClients.getClient(HttpTransportHttpClientOptionsSPI.CLIENT_NAME, false).getHttpClient(); } + context.request().pause(); + httpClient .request(requestOptions).compose(httpClientRequest -> { - context.request().headers().forEach((header) -> { - httpClientRequest.headers().set(header.getKey(), header.getValue()); - }); - context.request().handler(data -> httpClientRequest.write(data)); + context.request().headers().forEach((header) -> httpClientRequest.headers().set(header.getKey(), header.getValue())); + + context.request().resume(); + context.request().handler(httpClientRequest::write); context.request().endHandler((v) -> httpClientRequest.end()); return httpClientRequest.response().compose(httpClientResponse -> { context.response().setStatusCode(httpClientResponse.statusCode()); - httpClientResponse.headers().forEach((header) -> { - context.response().headers().set(header.getKey(), header.getValue()); - }); - httpClientResponse.handler(this.responseHandler(context, httpClientResponse)); + httpClientResponse.headers().forEach((header) -> context.response().headers().set(header.getKey(), header.getValue())); + httpClientResponse.handler(this.responseHandler(context)); httpClientResponse.endHandler((v) -> context.response().end()); return Future.succeededFuture(); }); @@ -180,7 +179,6 @@ public class CommonHttpEdgeDispatcher extends AbstractEdgeDispatcher { LOG.warn("send request to target {}:{} failed, cause {}", endpointObject.getHostOrIp(), endpointObject.getPort(), failure.getMessage()); serverNotReadyResponse(context); - return; }); } @@ -190,7 +188,7 @@ public class CommonHttpEdgeDispatcher extends AbstractEdgeDispatcher { context.response().end(); } - protected Handler<Buffer> responseHandler(RoutingContext routingContext, HttpClientResponse httpClientResponse) { + protected Handler<Buffer> responseHandler(RoutingContext routingContext) { return data -> routingContext.response().write(data); }
