@Experimental public class MultiClusterPooledConnectionProvider extends java.lang.Object implements ConnectionProvider
ConnectionProvider which supports multiple cluster/database endpoints each with their own isolated connection pool. With this ConnectionProvider users can seamlessly failover to Disaster Recovery (DR), Backup, and Active-Active cluster(s) by using simple configuration which is passed through from Resilience4j - https://resilience4j.readme.io/docs
Support for manual failback is provided by way of setActiveMultiClusterIndex(int)
| Modifier and Type | Class and Description |
|---|---|
static class |
MultiClusterPooledConnectionProvider.Cluster |
| Constructor and Description |
|---|
MultiClusterPooledConnectionProvider(MultiClusterClientConfig multiClusterClientConfig) |
| Modifier and Type | Method and Description |
|---|---|
void |
close() |
MultiClusterPooledConnectionProvider.Cluster |
getCluster() |
MultiClusterPooledConnectionProvider.Cluster |
getCluster(int multiClusterIndex) |
io.github.resilience4j.circuitbreaker.CircuitBreaker |
getClusterCircuitBreaker() |
io.github.resilience4j.circuitbreaker.CircuitBreaker |
getClusterCircuitBreaker(int multiClusterIndex) |
Connection |
getConnection() |
Connection |
getConnection(CommandArguments args) |
Connection |
getConnection(int multiClusterIndex) |
java.util.Map<?,Pool<Connection>> |
getConnectionMap() |
java.util.List<java.lang.Class<? extends java.lang.Throwable>> |
getFallbackExceptionList() |
int |
incrementActiveMultiClusterIndex()
Increments the actively used cluster/database endpoint (connection pool) amongst the pre-configured list which were
provided at startup via the MultiClusterClientConfig.
|
boolean |
isLastClusterCircuitBreakerForcedOpen() |
void |
runClusterFailoverPostProcessor(java.lang.Integer multiClusterIndex) |
void |
setActiveMultiClusterIndex(int multiClusterIndex)
Manually overrides the actively used cluster/database endpoint (connection pool) amongst the
pre-configured list which were provided at startup via the MultiClusterClientConfig.
|
void |
setClusterFailoverPostProcessor(java.util.function.Consumer<java.lang.String> clusterFailoverPostProcessor) |
void |
validateTargetConnection(int multiClusterIndex)
Design decision was made to defer responsibility for cross-replication validation to the user.
|
public MultiClusterPooledConnectionProvider(MultiClusterClientConfig multiClusterClientConfig)
public int incrementActiveMultiClusterIndex()
public void validateTargetConnection(int multiClusterIndex)
public void setActiveMultiClusterIndex(int multiClusterIndex)
public void close()
close in interface java.lang.AutoCloseablepublic Connection getConnection()
getConnection in interface ConnectionProviderpublic Connection getConnection(int multiClusterIndex)
public Connection getConnection(CommandArguments args)
getConnection in interface ConnectionProviderpublic java.util.Map<?,Pool<Connection>> getConnectionMap()
getConnectionMap in interface ConnectionProviderpublic MultiClusterPooledConnectionProvider.Cluster getCluster()
@VisibleForTesting public MultiClusterPooledConnectionProvider.Cluster getCluster(int multiClusterIndex)
public io.github.resilience4j.circuitbreaker.CircuitBreaker getClusterCircuitBreaker()
public io.github.resilience4j.circuitbreaker.CircuitBreaker getClusterCircuitBreaker(int multiClusterIndex)
public boolean isLastClusterCircuitBreakerForcedOpen()
public void runClusterFailoverPostProcessor(java.lang.Integer multiClusterIndex)
public void setClusterFailoverPostProcessor(java.util.function.Consumer<java.lang.String> clusterFailoverPostProcessor)
public java.util.List<java.lang.Class<? extends java.lang.Throwable>> getFallbackExceptionList()
Copyright © 2025. All rights reserved.