Skip to content

akurilov/netty-connection-pool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

High-performance non-blocking, multi-endpoint connection pool

Introduction

Currently Netty doesn't have a connection pool implementation which would allow to get a connection to any endpoint from the specified set. This connection pool implementation solves the problem using round-robin endpoint selection for each connection leased from the pool.

Also, this connection pool implementation supports the batch mode operation (leasing/releasing many connections at once).

Usage

Gradle

compile group: 'com.github.akurilov', name: 'netty-connection-pool', version: '1.2.1'

Code Example

final Bootstrap bootstrap = new Bootstrap();
// configure the Netty's bootstrap instance here

// your custom channel pool handler
final ChannelPoolHandler cph = ...

final NonBlockingConnPool connPool = new BasicMultiNodeConnPool(
    storageNodeAddrs, bootstrap, cph, storageNodePort, connAttemptsLimit
);

// optional
connPool.preCreateConnections(concurrencyLevel);

// use the pool
final Channel conn = connPool.lease();
...
connPool.release(conn);

// don't forget to clean up
connPool.close();

Batch Mode

...

// try to get up to 4096 connections per time
final int maxConnCount = 0x1000;
final List<Channel> conns = new ArrayList<>(maxConnCount);
final int availConnCount = connPool.lease(conns, maxConnCount);

// use the obtained connections
Channel conn;
for(int i = 0; i < availConnCount; i ++) {
    conn = conns.get(i);
    // use the connection
}

// release all connections back into the pool
connPool.lease(conns);