-
Notifications
You must be signed in to change notification settings - Fork 691
Closed
Feature
Copy link
Description
I'm wondering if reactor-netty can support setting pendingAcquireMaxCount and pendingAcquireTimeout in ConnectionProvider, in order to fail fast if no connection can be acquired.
Motivation
My motivation is that I can't estimate a proper maxConnections, and I don't want requests wait for connection, so I implement a HybridConnectionProvider to composite PooledConnectionProvider and NewConnectionProvider:
- If the pending queue in
PooledConnectionProvideris full (which I want set it to 0, and throwPoolAcquirePendingLimitExceptionimmediately), I can new a connection viaNewConnectionProvider. - If not, use
PooledConnectionProvideras normal.
Desired solution
My implement like:
public Mono<? extends Connection> acquire(@NonNull TransportConfig config, @NonNull ConnectionObserver connectionObserver, Supplier<? extends SocketAddress> remoteAddress, AddressResolverGroup<?> resolverGroup) {
Mono<Connection> poolAcquire = (Mono<Connection>) pooledConnectionProvider.acquire(config, connectionObserver, remoteAddress, resolverGroup);
return poolAcquire
.doOnError(throwable -> log.info("Encounter exception in pooledConnectionProvider, create temp connection!", throwable))
.onErrorResume(PoolAcquirePendingLimitException.class, __ -> newConnection(config, connectionObserver, remoteAddress, resolverGroup))
.onErrorResume(PoolAcquireTimeoutException.class, __ -> newConnection(config, connectionObserver, remoteAddress, resolverGroup));
}I hope the ConnectionProvider can:
return ConnectionProvider.builder("webclient-pool")
.pendingAcquireMaxCount(0)
.pendingAcquireTimeout(Duration.ZERO)
.build();Considered alternatives
No
Additional context
No
Metadata
Metadata
Assignees
Labels
type/enhancementA general enhancementA general enhancement