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); } }; }
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); } } }); }