@Override
                public void operationComplete(ChannelFuture cf) throws Exception {
                    if (!cf.isSuccess()) {
                        InvokeFuture f = conn.removeInvokeFuture(requestId);
                        if (f != null) {
                            f.cancelTimeout();
                            f.putResponse(getCommandFactory(conn).createSendFailedResponse(
                                conn.getRemoteAddress(), cf.cause()));
                        }
                        LOGGER.error("Invoke send failed. The address is {}",
                            RemotingUtil.parseRemoteAddress(conn.getChannel()), cf.cause());
                    }
                }
Invocation with future returned.

@param conn
@param request
@param timeoutMillis
@return
src/main/java/com/alipay/remoting/BaseRemoting.java