Java 类org.springframework.http.client.AsyncClientHttpRequestExecution 实例源码
项目:spring-cloud-commons
文件:AsyncLoadBalancerInterceptor.java
@Override
public ListenableFuture<ClientHttpResponse> intercept(final HttpRequest request, final byte[] body,
final AsyncClientHttpRequestExecution execution) throws IOException {
final URI originalUri = request.getURI();
String serviceName = originalUri.getHost();
return this.loadBalancer.execute(serviceName,
new LoadBalancerRequest<ListenableFuture<ClientHttpResponse>>() {
@Override
public ListenableFuture<ClientHttpResponse> apply(final ServiceInstance instance)
throws Exception {
HttpRequest serviceRequest = new ServiceRequestWrapper(request,
instance, loadBalancer);
return execution.executeAsync(serviceRequest, body);
}
});
}
项目:wingtips
文件:WingtipsAsyncClientHttpRequestInterceptorTest.java
@Before
public void beforeMethod() throws IOException {
resetTracing();
spanRecorder = new SpanRecorder();
Tracer.getInstance().addSpanLifecycleListener(spanRecorder);
method = HttpMethod.PATCH;
uri = URI.create("http://localhost:4242/" + UUID.randomUUID().toString());
httpRequest = new HttpRequest() {
@Override
public HttpHeaders getHeaders() { return new HttpHeaders(); }
@Override
public HttpMethod getMethod() {
return method;
}
@Override
public URI getURI() {
return uri;
}
};
body = UUID.randomUUID().toString().getBytes();
executionMock = mock(AsyncClientHttpRequestExecution.class);
doAnswer(invocation -> {
tracingStateAtTimeOfExecution = TracingState.getCurrentThreadTracingState();
executionResponseFuture = new SettableListenableFuture<>();
return executionResponseFuture;
}).when(executionMock).executeAsync(any(HttpRequest.class), any(byte[].class));
}
项目:wingtips
文件:WingtipsAsyncClientHttpRequestInterceptor.java
@Override
@SuppressWarnings("deprecation")
public ListenableFuture<ClientHttpResponse> intercept(
HttpRequest request, byte[] body, AsyncClientHttpRequestExecution execution
) throws IOException {
HttpRequest wrapperRequest = new HttpRequestWrapperWithModifiableHeaders(request);
Tracer tracer = Tracer.getInstance();
// Handle subspan stuff if desired.
SpanAroundAsyncCallFinisher subspanFinisher = null;
TracingState originalThreadInfo = null;
if (surroundCallsWithSubspan) {
originalThreadInfo = TracingState.getCurrentThreadTracingState();
// This will start a new trace if necessary, or a subspan if a trace is already in progress.
tracer.startSpanInCurrentContext(getSubspanSpanName(request), Span.SpanPurpose.CLIENT);
// Create the callback that will complete the subspan when the request finishes.
subspanFinisher = new SpanAroundAsyncCallFinisher(TracingState.getCurrentThreadTracingState());
}
try {
// Whether we created a subspan or not we want to add the tracing headers with the current span's info.
propagateTracingHeaders(wrapperRequest, tracer.getCurrentSpan());
// Execute the request/interceptor chain, and add the callback to finish the subspan (if one exists).
ListenableFuture<ClientHttpResponse> result = execution.executeAsync(wrapperRequest, body);
if (subspanFinisher != null) {
result.addCallback(subspanFinisher);
}
return result;
}
catch(Throwable t) {
// Something went wrong in the execution.executeAsync(...) call so we complete the subspan now (if one
// exists)
if (subspanFinisher != null) {
subspanFinisher.finishCallSpan();
}
throw t;
}
finally {
// Reset back to the original tracing state that was on this thread when this method began (only relevant
// if surroundCallsWithSubspan is true).
if (surroundCallsWithSubspan) {
unlinkTracingFromCurrentThread(originalThreadInfo);
}
}
}
项目:haven-platform
文件:BasicAuthAsyncInterceptor.java
@Override
public ListenableFuture<ClientHttpResponse> intercept(HttpRequest request, byte[] body, AsyncClientHttpRequestExecution execution) throws IOException {
String token = Base64Utils.encodeToString((this.username + ":" + this.password).getBytes(StandardCharsets.UTF_8));
request.getHeaders().add("Authorization", "Basic " + token);
return execution.executeAsync(request, body);
}