Make IOReactor IO session decorator configurable.

This commit is contained in:
Arturo Bernal 2021-10-23 09:12:38 +02:00 committed by Oleg Kalnichevski
parent eb22ef30fc
commit fff097615b
1 changed files with 14 additions and 1 deletions

View File

@ -83,6 +83,7 @@ import org.apache.hc.client5.http.routing.HttpRoutePlanner;
import org.apache.hc.core5.annotation.Internal; import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.concurrent.DefaultThreadFactory; import org.apache.hc.core5.concurrent.DefaultThreadFactory;
import org.apache.hc.core5.function.Callback; import org.apache.hc.core5.function.Callback;
import org.apache.hc.core5.function.Decorator;
import org.apache.hc.core5.http.ConnectionReuseStrategy; import org.apache.hc.core5.http.ConnectionReuseStrategy;
import org.apache.hc.core5.http.Header; import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpHost; import org.apache.hc.core5.http.HttpHost;
@ -110,6 +111,7 @@ import org.apache.hc.core5.reactor.Command;
import org.apache.hc.core5.reactor.DefaultConnectingIOReactor; import org.apache.hc.core5.reactor.DefaultConnectingIOReactor;
import org.apache.hc.core5.reactor.IOEventHandlerFactory; import org.apache.hc.core5.reactor.IOEventHandlerFactory;
import org.apache.hc.core5.reactor.IOReactorConfig; import org.apache.hc.core5.reactor.IOReactorConfig;
import org.apache.hc.core5.reactor.IOSession;
import org.apache.hc.core5.util.Args; import org.apache.hc.core5.util.Args;
import org.apache.hc.core5.util.TimeValue; import org.apache.hc.core5.util.TimeValue;
import org.apache.hc.core5.util.VersionInfo; import org.apache.hc.core5.util.VersionInfo;
@ -214,6 +216,7 @@ public class HttpAsyncClientBuilder {
private UserTokenHandler userTokenHandler; private UserTokenHandler userTokenHandler;
private AuthenticationStrategy targetAuthStrategy; private AuthenticationStrategy targetAuthStrategy;
private AuthenticationStrategy proxyAuthStrategy; private AuthenticationStrategy proxyAuthStrategy;
private Decorator<IOSession> ioSessionDecorator;
private LinkedList<RequestInterceptorEntry> requestInterceptors; private LinkedList<RequestInterceptorEntry> requestInterceptors;
private LinkedList<ResponseInterceptorEntry> responseInterceptors; private LinkedList<ResponseInterceptorEntry> responseInterceptors;
@ -384,6 +387,16 @@ public class HttpAsyncClientBuilder {
return this; return this;
} }
/**
* Sets the {@link IOSession} {@link Decorator} that will be use with the client's IOReactor.
*
* @since 5.2
*/
public final HttpAsyncClientBuilder setIoSessionDecorator(final Decorator<IOSession> ioSessionDecorator) {
this.ioSessionDecorator = ioSessionDecorator;
return this;
}
/** /**
* Adds this protocol interceptor to the head of the protocol processing list. * Adds this protocol interceptor to the head of the protocol processing list.
*/ */
@ -919,7 +932,7 @@ public class HttpAsyncClientBuilder {
ioEventHandlerFactory, ioEventHandlerFactory,
ioReactorConfig != null ? ioReactorConfig : IOReactorConfig.DEFAULT, ioReactorConfig != null ? ioReactorConfig : IOReactorConfig.DEFAULT,
threadFactory != null ? threadFactory : new DefaultThreadFactory("httpclient-dispatch", true), threadFactory != null ? threadFactory : new DefaultThreadFactory("httpclient-dispatch", true),
LoggingIOSessionDecorator.INSTANCE, ioSessionDecorator != null ? ioSessionDecorator : LoggingIOSessionDecorator.INSTANCE,
ioReactorExceptionCallback != null ? ioReactorExceptionCallback : LoggingExceptionCallback.INSTANCE, ioReactorExceptionCallback != null ? ioReactorExceptionCallback : LoggingExceptionCallback.INSTANCE,
null, null,
ioSession -> ioSession.enqueue(new ShutdownCommand(CloseMode.GRACEFUL), Command.Priority.IMMEDIATE)); ioSession -> ioSession.enqueue(new ShutdownCommand(CloseMode.GRACEFUL), Command.Priority.IMMEDIATE));