Java 类io.netty.channel.pool.ChannelPoolMap 实例源码

项目:aws-sdk-java-v2    文件:NettyNioAsyncHttpClient.java   
private ChannelPoolMap<URI, ChannelPool> createChannelPoolMap() {
    return new SdkChannelPoolMap<URI, ChannelPool>() {
        @Override
        protected ChannelPool newPool(URI key) {
            Bootstrap bootstrap =
                    new Bootstrap()
                            .group(group)
                            .channel(resolveSocketChannelClass(group))
                            .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, configuration.connectionTimeout())
                            .option(ChannelOption.TCP_NODELAY, true)
                            .remoteAddress(key.getHost(), key.getPort());
            SslContext sslContext = sslContext(key.getScheme());
            return new FixedChannelPool(bootstrap,
                                        // TODO expose better options for this
                                        new ChannelPipelineInitializer(sslContext),
                                        ChannelHealthChecker.ACTIVE,
                                        FixedChannelPool.AcquireTimeoutAction.FAIL,
                                        configuration.connectionAcquisitionTimeout(),
                                        configuration.maxConnectionsPerEndpoint(),
                                        10_000);
        }
    };
}
项目:util4j    文件:PoolTest.java   
public static void main(String[] args) {
        EventLoopGroup group = new NioEventLoopGroup();
        final Bootstrap cb = new Bootstrap();
        cb.group(group).channel(NioSocketChannel.class);
        InetSocketAddress addr1 = new InetSocketAddress("10.0.0.10", 8888);
        InetSocketAddress addr2 = new InetSocketAddress("10.0.0.11", 8888);

        //连接池map
        ChannelPoolMap<InetSocketAddress, SimpleChannelPool> poolMap = new AbstractChannelPoolMap<InetSocketAddress, SimpleChannelPool>() {
            @Override
            protected SimpleChannelPool newPool(InetSocketAddress key) {
                return new SimpleChannelPool(cb.remoteAddress(key), new TestChannelPoolHandler());
            }
        };

        final SimpleChannelPool pool1 = poolMap.get(addr1);//取出連接addr1地址的连接池
        final SimpleChannelPool pool2 = poolMap.get(addr2);//取出連接addr2地址的连接池
        Future<Channel> f1 = pool1.acquire();//获取一个连接
        f1.addListener(new FutureListener<Channel>() {
            @Override
            public void operationComplete(Future<Channel> f) {
                if (f.isSuccess()) {
                    Channel ch = f.getNow();
                   //连接地址1的某个channel
                    //使用连接发送消息
//                  ch.write(msg)
                    //用完释放
                    pool1.release(ch);
                }
            }
        });

    }