Pipeline execution callstack and Chains
final HttpPipelineBuilder pipelineBuilder = new HttpPipelineBuilder ();
// Set Policies
pipelineBuilder .policies (
new HttpPipelinePolicy () { // policy0
@ Override
public void process (HttpPipelinePolicyChain chain0 ) {
chain0 .processNextPolicy (chain0 .getRequest (), new HttpCallback () {
@ Override
public void onSuccess (HttpResponse response ) {
chain0 .finishedProcessing (response );
}
@ Override
public void onError (Throwable error ) {
chain0 .finishedProcessing (error );
}
});
}
},
new HttpPipelinePolicy () { // policy1
@ Override
public void process (HttpPipelinePolicyChain chain1 ) {
chain1 .processNextPolicy (chain1 .getRequest (), new HttpCallback () {
@ Override
public void onSuccess (HttpResponse response ) {
chain1 .finishedProcessing (response );
}
@ Override
public void onError (Throwable error ) {
chain1 .finishedProcessing (error );
}
});
}
},
new HttpPipelinePolicy () { // // policy2
@ Override
public void process (HttpPipelinePolicyChain chain2 ) {
chain2 .processNextPolicy (chain2 .getRequest (), new HttpCallback () {
@ Override
public void onSuccess (HttpResponse response ) {
chain2 .finishedProcessing (response );
}
@ Override
public void onError (Throwable error ) {
chain2 .finishedProcessing (error );
}
});
}
});
// Set Http client
pipelineBuilder .httpClient (okHttpClient );
// Build pipeline
HttpPipeline pipeline = pipelineBuilder .build ();
pipeline .send (httpRequest , new HttpCallback () {
@ Override
public void onSuccess (HttpResponse response ) {
}
@ Override
public void onError (Throwable error ) {
}
});
Chains (after callstack rewind)
The root callback (delegating and housekeeping)
Pipelines sharing HttpClient
public interface HttpClient {
HttpCallDispatcher getHttpCallDispatcher ();
void send (HttpRequest httpRequest , HttpCallback httpCallback );
static HttpClient createDefault () {
return HttpClientProviders .createInstance ();
}
}
OkHttp and Azure Pipeline
HttpUrlConnection and Azure Pipeline
public final class HttpCallDispatcher {
public HttpCallDispatcher () {..}
public HttpCallDispatcher (ExecutorService executorService ) {...}
public HttpCallDispatcher (ExecutorService executorService ,
ScheduledExecutorService scheduledExecutorService ) {..}
public void enqueue (HttpCallFunction httpCallFunction ,
HttpRequest httpRequest ,
HttpCallback httpCallback ) { .. }
// Package Private
void scheduleChainProceed (HttpPipelinePolicyChainImpl chain ,
HttpRequest httpRequest ,
HttpCallback httpCallback ,
long delay ,
TimeUnit timeUnit ) { ..}
}