This commit is contained in:
Adrian Cole
2020-03-02 16:24:59 +08:00
parent eec55b9a6c
commit 27fe606c83
4 changed files with 30 additions and 23 deletions

View File

@@ -152,7 +152,7 @@ class HttpClientBeanPostProcessor implements BeanPostProcessor {
// Start a new client span with the appropriate parent
TraceContext parent = req.currentContext().getOrDefault(TraceContext.class,
null);
WrappedHttpClientRequest request = new WrappedHttpClientRequest(req);
HttpClientRequestWrapper request = new HttpClientRequestWrapper(req);
clientSpan = handler().handleSendWithParent(request, parent);
parseConnectionAddress(connection, clientSpan);
@@ -240,18 +240,18 @@ class HttpClientBeanPostProcessor implements BeanPostProcessor {
if (clientSpan == null) {
return; // Unexpected. In the handle method, without a span to finish!
}
WrappedHttpClientResponse response = resp != null
? new WrappedHttpClientResponse(resp) : null;
HttpClientResponseWrapper response = resp != null
? new HttpClientResponseWrapper(resp) : null;
handler().handleReceive(response, error, clientSpan);
}
}
static final class WrappedHttpClientRequest extends brave.http.HttpClientRequest {
static final class HttpClientRequestWrapper extends brave.http.HttpClientRequest {
final HttpClientRequest delegate;
WrappedHttpClientRequest(HttpClientRequest delegate) {
HttpClientRequestWrapper(HttpClientRequest delegate) {
this.delegate = delegate;
}
@@ -287,11 +287,11 @@ class HttpClientBeanPostProcessor implements BeanPostProcessor {
}
static final class WrappedHttpClientResponse extends brave.http.HttpClientResponse {
static final class HttpClientResponseWrapper extends brave.http.HttpClientResponse {
final HttpClientResponse delegate;
WrappedHttpClientResponse(HttpClientResponse delegate) {
HttpClientResponseWrapper(HttpClientResponse delegate) {
this.delegate = delegate;
}

View File

@@ -23,6 +23,8 @@ import java.util.function.Function;
import brave.Span;
import brave.http.HttpClientHandler;
import brave.http.HttpClientRequest;
import brave.http.HttpClientResponse;
import brave.http.HttpTracing;
import brave.propagation.CurrentTraceContext;
import brave.propagation.CurrentTraceContext.Scope;
@@ -122,7 +124,7 @@ final class TraceExchangeFilterFunction implements ExchangeFilterFunction {
final Function<? super Publisher<DataBuffer>, ? extends Publisher<DataBuffer>> scopePassingTransformer;
// Lazy initialized fields
HttpClientHandler<brave.http.HttpClientRequest, brave.http.HttpClientResponse> handler;
HttpClientHandler<HttpClientRequest, HttpClientResponse> handler;
CurrentTraceContext currentTraceContext;
@@ -148,7 +150,7 @@ final class TraceExchangeFilterFunction implements ExchangeFilterFunction {
return this.currentTraceContext;
}
HttpClientHandler<brave.http.HttpClientRequest, brave.http.HttpClientResponse> handler() {
HttpClientHandler<HttpClientRequest, HttpClientResponse> handler() {
if (this.handler == null) {
this.handler = HttpClientHandler.create(this.httpTracing.get());
}
@@ -161,7 +163,7 @@ final class TraceExchangeFilterFunction implements ExchangeFilterFunction {
final ClientRequest request;
final HttpClientHandler<brave.http.HttpClientRequest, brave.http.HttpClientResponse> handler;
final HttpClientHandler<HttpClientRequest, HttpClientResponse> handler;
final CurrentTraceContext currentTraceContext;
@@ -185,7 +187,7 @@ final class TraceExchangeFilterFunction implements ExchangeFilterFunction {
Context context = subscriber.currentContext();
HttpClientRequest wrapper = new HttpClientRequest(request);
ClientRequestWrapper wrapper = new ClientRequestWrapper(request);
Span span = handler.handleSendWithParent(wrapper, parent);
if (log.isDebugEnabled()) {
log.debug("HttpClientHandler::handleSend: " + span);
@@ -209,7 +211,7 @@ final class TraceExchangeFilterFunction implements ExchangeFilterFunction {
final Span clientSpan;
final HttpClientHandler<brave.http.HttpClientRequest, brave.http.HttpClientResponse> handler;
final HttpClientHandler<HttpClientRequest, HttpClientResponse> handler;
final Function<? super Publisher<DataBuffer>, ? extends Publisher<DataBuffer>> scopePassingTransformer;
@@ -308,20 +310,20 @@ final class TraceExchangeFilterFunction implements ExchangeFilterFunction {
}
void handleReceive(@Nullable ClientResponse res, @Nullable Throwable error) {
HttpClientResponse response = res != null ? new HttpClientResponse(res)
ClientResponseWrapper response = res != null ? new ClientResponseWrapper(res)
: null;
this.handler.handleReceive(response, error, clientSpan);
}
}
private static final class HttpClientRequest extends brave.http.HttpClientRequest {
private static final class ClientRequestWrapper extends HttpClientRequest {
final ClientRequest delegate;
final ClientRequest.Builder builder;
HttpClientRequest(ClientRequest delegate) {
ClientRequestWrapper(ClientRequest delegate) {
this.delegate = delegate;
this.builder = ClientRequest.from(delegate);
}
@@ -362,11 +364,11 @@ final class TraceExchangeFilterFunction implements ExchangeFilterFunction {
}
static final class HttpClientResponse extends brave.http.HttpClientResponse {
static final class ClientResponseWrapper extends HttpClientResponse {
final ClientResponse delegate;
HttpClientResponse(ClientResponse delegate) {
ClientResponseWrapper(ClientResponse delegate) {
this.delegate = delegate;
}

View File

@@ -20,7 +20,7 @@ import org.assertj.core.api.BDDAssertions;
import org.junit.Test;
import org.mockito.BDDMockito;
import org.springframework.cloud.sleuth.instrument.web.client.TraceExchangeFilterFunction.HttpClientResponse;
import org.springframework.cloud.sleuth.instrument.web.client.TraceExchangeFilterFunction.ClientResponseWrapper;
import org.springframework.web.reactive.function.client.ClientResponse;
public class TraceExchangeFilterFunctionHttpClientResponseTests {
@@ -29,7 +29,7 @@ public class TraceExchangeFilterFunctionHttpClientResponseTests {
public void should_return_0_when_invalid_status_code_is_returned() {
ClientResponse clientResponse = BDDMockito.mock(ClientResponse.class);
BDDMockito.given(clientResponse.rawStatusCode()).willReturn(-1);
HttpClientResponse response = new HttpClientResponse(clientResponse);
ClientResponseWrapper response = new ClientResponseWrapper(clientResponse);
Integer statusCode = response.statusCode();
@@ -40,7 +40,7 @@ public class TraceExchangeFilterFunctionHttpClientResponseTests {
public void should_return_status_code_when_valid_status_code_is_returned() {
ClientResponse clientResponse = BDDMockito.mock(ClientResponse.class);
BDDMockito.given(clientResponse.rawStatusCode()).willReturn(200);
HttpClientResponse response = new HttpClientResponse(clientResponse);
ClientResponseWrapper response = new ClientResponseWrapper(clientResponse);
Integer statusCode = response.statusCode();

View File

@@ -28,6 +28,7 @@ import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.reactive.ClientHttpConnector;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.ClientResponse;
@@ -118,9 +119,13 @@ public class WebClientBraveTests
}
@Bean
WebClient.Builder webClientBuilder(HttpClient httpClient) {
return WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient));
ClientHttpConnector clientHttpConnector(HttpClient httpClient) {
return new ReactorClientHttpConnector(httpClient);
}
@Bean
WebClient.Builder webClientBuilder(ClientHttpConnector clientHttpConnector) {
return WebClient.builder().clientConnector(clientHttpConnector);
}
}