Class SimpleChannelPool
java.lang.Object
io.netty.channel.pool.SimpleChannelPool
- All Implemented Interfaces:
ChannelPool, Closeable, AutoCloseable
- Direct Known Subclasses:
FixedChannelPool
Simple
ChannelPool implementation which will create new Channels if someone tries to acquire
a Channel but none is in the pool atm. No limit on the maximal concurrent Channels is enforced.
This implementation uses LIFO order for Channels in the ChannelPool.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Bootstrapprivate final ChannelPoolHandlerprivate final ChannelHealthCheckerprivate final booleanprivate static final AttributeKey<SimpleChannelPool> private final boolean -
Constructor Summary
ConstructorsConstructorDescriptionSimpleChannelPool(Bootstrap bootstrap, ChannelPoolHandler handler) Creates a new instance using theChannelHealthChecker.ACTIVE.SimpleChannelPool(Bootstrap bootstrap, ChannelPoolHandler handler, ChannelHealthChecker healthCheck) Creates a new instance.SimpleChannelPool(Bootstrap bootstrap, ChannelPoolHandler handler, ChannelHealthChecker healthCheck, boolean releaseHealthCheck) Creates a new instance.SimpleChannelPool(Bootstrap bootstrap, ChannelPoolHandler handler, ChannelHealthChecker healthCheck, boolean releaseHealthCheck, boolean lastRecentUsed) Creates a new instance. -
Method Summary
Modifier and TypeMethodDescriptionacquire()Acquire aChannelfrom thisChannelPool.Acquire aChannelfrom thisChannelPool.acquireHealthyFromPoolOrNew(Promise<Channel> promise) Tries to retrieve healthy channel from the pool if any or creates a new channel otherwise.protected BootstrapReturns theBootstrapthis pool will use to open new connections.voidclose()private voidcloseAndFail(Channel channel, Throwable cause, Promise<?> promise) Closes the pool in an async manner.private voidcloseChannel(Channel channel) protected ChannelFutureBootstrap a newChannel.private voiddoHealthCheck(Channel channel, Promise<Channel> promise) private voiddoHealthCheckOnRelease(Channel channel, Promise<Void> promise) private voiddoReleaseChannel(Channel channel, Promise<Void> promise) protected ChannelPoolHandlerhandler()Returns theChannelPoolHandlerthat will be notified for the different pool actions.protected ChannelHealthCheckerReturns theChannelHealthCheckerthat will be used to check if aChannelis healthy.private voidnotifyConnect(ChannelFuture future, Promise<Channel> promise) private voidprotected booleanofferChannel(Channel channel) Offer aChannelback to the internal storage.protected ChannelPoll aChannelout of the internal storage to reuse it.Release aChannelback to thisChannelPool.Release aChannelback to thisChannelPool.private voidreleaseAndOffer(Channel channel, Promise<Void> promise) private voidAdds the channel back to the pool only if the channel is healthy.protected booleanIndicates whether this pool will check the health of channels before offering them back into the pool.
-
Field Details
-
POOL_KEY
-
deque
-
handler
-
healthCheck
-
bootstrap
-
releaseHealthCheck
private final boolean releaseHealthCheck -
lastRecentUsed
private final boolean lastRecentUsed
-
-
Constructor Details
-
SimpleChannelPool
Creates a new instance using theChannelHealthChecker.ACTIVE.- Parameters:
bootstrap- theBootstrapthat is used for connectionshandler- theChannelPoolHandlerthat will be notified for the different pool actions
-
SimpleChannelPool
public SimpleChannelPool(Bootstrap bootstrap, ChannelPoolHandler handler, ChannelHealthChecker healthCheck) Creates a new instance.- Parameters:
bootstrap- theBootstrapthat is used for connectionshandler- theChannelPoolHandlerthat will be notified for the different pool actionshealthCheck- theChannelHealthCheckerthat will be used to check if aChannelis still healthy when obtain from theChannelPool
-
SimpleChannelPool
public SimpleChannelPool(Bootstrap bootstrap, ChannelPoolHandler handler, ChannelHealthChecker healthCheck, boolean releaseHealthCheck) Creates a new instance.- Parameters:
bootstrap- theBootstrapthat is used for connectionshandler- theChannelPoolHandlerthat will be notified for the different pool actionshealthCheck- theChannelHealthCheckerthat will be used to check if aChannelis still healthy when obtain from theChannelPoolreleaseHealthCheck- will check channel health before offering back if this parameter set totrue; otherwise, channel health is only checked at acquisition time
-
SimpleChannelPool
public SimpleChannelPool(Bootstrap bootstrap, ChannelPoolHandler handler, ChannelHealthChecker healthCheck, boolean releaseHealthCheck, boolean lastRecentUsed) Creates a new instance.- Parameters:
bootstrap- theBootstrapthat is used for connectionshandler- theChannelPoolHandlerthat will be notified for the different pool actionshealthCheck- theChannelHealthCheckerthat will be used to check if aChannelis still healthy when obtain from theChannelPoolreleaseHealthCheck- will check channel health before offering back if this parameter set totrue; otherwise, channel health is only checked at acquisition timelastRecentUsed-trueChannelselection will be LIFO, iffalseFIFO.
-
-
Method Details
-
bootstrap
-
handler
Returns theChannelPoolHandlerthat will be notified for the different pool actions.- Returns:
- the
ChannelPoolHandlerthat will be notified for the different pool actions
-
healthChecker
Returns theChannelHealthCheckerthat will be used to check if aChannelis healthy.- Returns:
- the
ChannelHealthCheckerthat will be used to check if aChannelis healthy
-
releaseHealthCheck
protected boolean releaseHealthCheck()Indicates whether this pool will check the health of channels before offering them back into the pool.- Returns:
trueif this pool will check the health of channels before offering them back into the pool, orfalseif channel health is only checked at acquisition time
-
acquire
Description copied from interface:ChannelPoolAcquire aChannelfrom thisChannelPool. The returnedFutureis notified once the acquire is successful and failed otherwise. Its important that an acquired is always released to the pool again, even if theChannelis explicitly closed..- Specified by:
acquirein interfaceChannelPool
-
acquire
Description copied from interface:ChannelPoolAcquire aChannelfrom thisChannelPool. The givenPromiseis notified once the acquire is successful and failed otherwise. Its important that an acquired is always released to the pool again, even if theChannelis explicitly closed..- Specified by:
acquirein interfaceChannelPool
-
acquireHealthyFromPoolOrNew
-
notifyConnect
-
doHealthCheck
-
notifyHealthCheck
-
connectChannel
Bootstrap a newChannel. The default implementation usesBootstrap.connect(), sub-classes may override this.The
Bootstrapthat is passed in here is cloned viaBootstrap.clone(), so it is safe to modify. -
release
Description copied from interface:ChannelPoolRelease aChannelback to thisChannelPool. The returnedFutureis notified once the release is successful and failed otherwise. When failed theChannelwill automatically closed.- Specified by:
releasein interfaceChannelPool
-
release
Description copied from interface:ChannelPoolRelease aChannelback to thisChannelPool. The givenPromiseis notified once the release is successful and failed otherwise. When failed theChannelwill automatically closed.- Specified by:
releasein interfaceChannelPool
-
doReleaseChannel
-
doHealthCheckOnRelease
-
releaseAndOfferIfHealthy
private void releaseAndOfferIfHealthy(Channel channel, Promise<Void> promise, Future<Boolean> future) Adds the channel back to the pool only if the channel is healthy.- Parameters:
channel- the channel to put back to the poolpromise- offer operation promise.future- the future that contains information fif channel is healthy or not.- Throws:
Exception- in case when failed to notify handler about release operation.
-
releaseAndOffer
-
closeChannel
-
closeAndFail
-
pollChannel
Poll aChannelout of the internal storage to reuse it. This will returnnullif noChannelis ready to be reused. Sub-classes may overridepollChannel()andofferChannel(Channel). Be aware that implementations of these methods needs to be thread-safe! -
offerChannel
Offer aChannelback to the internal storage. This will returntrueif theChannelcould be added,falseotherwise. Sub-classes may overridepollChannel()andofferChannel(Channel). Be aware that implementations of these methods needs to be thread-safe! -
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceChannelPool- Specified by:
closein interfaceCloseable
-
closeAsync
-