Package brave.http
Class HttpClientHandler<Req,Resp>
java.lang.Object
brave.http.HttpClientHandler<Req,Resp>
- Type Parameters:
Req- the native http request type of the client.Resp- the native http response type of the client.
public final class HttpClientHandler<Req,Resp> extends Object
This standardizes a way to instrument http clients, particularly in a way that encourages use of
portable customizations via
HttpRequestParser and HttpResponseParser.
Synchronous interception is the most straight forward instrumentation.
You generally need to:
- Start the span and add trace headers to the request
- Put the span in scope so things like log integration works
- Invoke the request
- Catch any errors
- Complete the span
HttpClientRequestWrapper wrapper = new HttpClientRequestWrapper(request);
Span span = handler.handleSend(wrapper); // 1.
Result result = null;
Throwable error = null;
try (Scope ws = currentTraceContext.newScope(span.context())) { // 2.
return result = invoke(request); // 3.
} catch (Throwable e) {
error = e; // 4.
throw e;
} finally {
HttpClientResponseWrapper response = result != null
? new HttpClientResponseWrapper(wrapper, result, error)
: null;
handler.handleReceive(response, error, span); // 5.
}
- Since:
- 4.3
-
Method Summary
Modifier and Type Method Description static HttpClientHandler<HttpClientRequest,HttpClientResponse>create(HttpTracing httpTracing)static <Req, Resp> HttpClientHandler<Req,Resp>create(HttpTracing httpTracing, HttpClientAdapter<Req,Resp> adapter)Deprecated.Since 5.7, usecreate(HttpTracing)as it is more portable.voidhandleReceive(Resp response, Throwable error, Span span)Finishes the client span after assigning it tags according to the response or error.SpanhandleSend(HttpClientRequest request)Starts the client span after assigning it a name and tags.SpanhandleSend(HttpClientRequest request, Span span)LikehandleSend(HttpClientRequest), except explicitly controls the span representing the request.<C> SpanhandleSend(TraceContext.Injector<C> injector, C carrier, Req request)Deprecated.Since 5.7, usehandleSend(HttpClientRequest).<C> SpanhandleSend(TraceContext.Injector<C> injector, C carrier, Req request, Span span)Deprecated.Since 5.7, usehandleSend(HttpClientRequest).SpanhandleSend(TraceContext.Injector<Req> injector, Req request)Deprecated.Since 5.7, usehandleSend(HttpClientRequest), as this allows more advanced samplers to be used.SpanhandleSend(TraceContext.Injector<Req> injector, Req request, Span span)Deprecated.Since 5.7, usehandleSend(HttpClientRequest, Span).SpanhandleSendWithParent(HttpClientRequest request, TraceContext parent)LikehandleSend(HttpClientRequest), except explicitly controls the parent of the client span.SpannextSpan(Req request)Deprecated.since 5.8 useTracer.nextSpan(SamplerFunction, Object)
-
Method Details
-
create
public static HttpClientHandler<HttpClientRequest,HttpClientResponse> create(HttpTracing httpTracing)- Since:
- 5.7
-
create
@Deprecated public static <Req, Resp> HttpClientHandler<Req,Resp> create(HttpTracing httpTracing, HttpClientAdapter<Req,Resp> adapter)Deprecated.Since 5.7, usecreate(HttpTracing)as it is more portable.- Since:
- 4.3
-
handleSend
Starts the client span after assigning it a name and tags. Thisinjectsthe trace context onto the request before returning.Call this before sending the request on the wire.
-
handleSendWithParent
LikehandleSend(HttpClientRequest), except explicitly controls the parent of the client span.- Parameters:
parent- the parent of the client span representing this request, or null for a new trace.- Since:
- 5.10
- See Also:
Tracer.nextSpanWithParent(SamplerFunction, Object, TraceContext)
-
handleSend
LikehandleSend(HttpClientRequest), except explicitly controls the span representing the request.- Since:
- 5.7
-
handleSend
Deprecated.Since 5.7, usehandleSend(HttpClientRequest), as this allows more advanced samplers to be used.- Since:
- 4.3
-
handleSend
Deprecated.Since 5.7, usehandleSend(HttpClientRequest).- Since:
- 4.3
-
handleSend
Deprecated.Since 5.7, usehandleSend(HttpClientRequest, Span).- Since:
- 4.4
-
handleSend
@Deprecated public <C> Span handleSend(TraceContext.Injector<C> injector, C carrier, Req request, Span span)Deprecated.Since 5.7, usehandleSend(HttpClientRequest).- Since:
- 4.4
-
nextSpan
Deprecated.since 5.8 useTracer.nextSpan(SamplerFunction, Object)- Since:
- 4.4
-
handleReceive
Finishes the client span after assigning it tags according to the response or error.This is typically called once the response headers are received, and after the span is
no longer in scope.Note: Either the response or error parameters may be null, but not both.
- Since:
- 4.3
- See Also:
HttpTracing.clientResponseParser()
-