/** * Retrieve a {@link ChannelPool} instance using {@link AbstractMessage} as the search key. * * @param message * An {@link AbstractMessage} to be used to derive the actual key from * * @return A {@link ChannelPool} instance */ @Override public ChannelPool get(M message) { return internalPoolMap.get(keyResolver.apply(message)); }
@Override public void send(final RawData msg) { final ChannelPool channelPool = poolMap.get(new InetSocketAddress(msg.getAddress(), msg.getPort())); Future<Channel> acquire = channelPool.acquire(); acquire.addListener(new GenericFutureListener<Future<Channel>>() { @Override public void operationComplete(Future<Channel> future) throws Exception { if (future.isSuccess()) { Channel channel = future.getNow(); try { channel.writeAndFlush(Unpooled.wrappedBuffer(msg.getBytes())); } finally { channelPool.release(channel); } } else { LOGGER.log(Level.WARNING, "Unable to open connection to " + msg.getAddress(), future.cause()); } } }); }