src/main/java/com/alipay/remoting/BaseRemoting.java
protected RemotingCommand invokeSync(final Connection conn, final RemotingCommand request,
                                         final int timeoutMillis) throws RemotingException,
                                                                 InterruptedException {
        final InvokeFuture future = createInvokeFuture(request, request.getInvokeContext());
        conn.addInvokeFuture(future);
        final int requestId = request.getId();
        try {
            conn.getChannel().writeAndFlush(request).addListener(new ChannelFutureListener() {

                @Override
                public void operationComplete(ChannelFuture f) throws Exception {
                    if (!f.isSuccess()) {
                        conn.removeInvokeFuture(requestId);
                        future.putResponse(commandFactory.createSendFailedResponse(
                            conn.getRemoteAddress(), f.cause()));
                        logger.error("Invoke send failed, id={}", requestId, f.cause());
                    }
                }

            });
        } catch (Exception e) {
            conn.removeInvokeFuture(requestId);
            future.putResponse(commandFactory.createSendFailedResponse(conn.getRemoteAddress(), e));
            logger.error("Exception caught when sending invocation, id={}", requestId, e);
        }
        RemotingCommand response = future.waitResponse(timeoutMillis);

        if (response == null) {
            conn.removeInvokeFuture(requestId);
            response = this.commandFactory.createTimeoutResponse(conn.getRemoteAddress());
            logger.warn("Wait response, request id={} timeout!", requestId);
        }

        return response;
    }
protected RemotingCommand invokeSync(final Connection conn, final RemotingCommand request,
                                         final int timeoutMillis) throws RemotingException,
                                                                 InterruptedException {
        final InvokeFuture future = createInvokeFuture(request, request.getInvokeContext());
        conn.addInvokeFuture(future);
        final int requestId = request.getId();
        try {
            conn.getChannel().writeAndFlush(request).addListener(new ChannelFutureListener() {

                @Override
                public void operationComplete(ChannelFuture f) throws Exception {
                    if (!f.isSuccess()) {
                        conn.removeInvokeFuture(requestId);
                        future.putResponse(commandFactory.createSendFailedResponse(
                            conn.getRemoteAddress(), f.cause()));
                        logger.error("Invoke send failed, id={}", requestId, f.cause());
                    }
                }

            });
        } catch (Exception e) {
            conn.removeInvokeFuture(requestId);
            future.putResponse(commandFactory.createSendFailedResponse(conn.getRemoteAddress(), e));
            logger.error("Exception caught when sending invocation, id={}", requestId, e);
        }
        RemotingCommand response = future.waitResponse(timeoutMillis);

        if (response == null) {
            conn.removeInvokeFuture(requestId);
            response = this.commandFactory.createTimeoutResponse(conn.getRemoteAddress());
            logger.warn("Wait response, request id={} timeout!", requestId);
        }

        return response;
    }
protected RemotingCommand invokeSync ( final Connection conn , final RemotingCommand request , final int timeoutMillis ) throws RemotingException , InterruptedException { final InvokeFuture future = createInvokeFuture ( request , request . getInvokeContext ( ) ) ; conn . addInvokeFuture ( future ) ; final int requestId = request . getId ( ) ; try { conn . getChannel ( ) . writeAndFlush ( request ) . addListener ( new ChannelFutureListener ( ) { @ Override public void operationComplete ( ChannelFuture f ) throws Exception { if ( ! f . isSuccess ( ) ) { conn . removeInvokeFuture ( requestId ) ; future . putResponse ( commandFactory . createSendFailedResponse ( conn . getRemoteAddress ( ) , f . cause ( ) ) ) ; logger . error ( "Invoke send failed, id={}" , requestId , f . cause ( ) ) ; } } } ) ; } catch ( Exception e ) { conn . removeInvokeFuture ( requestId ) ; future . putResponse ( commandFactory . createSendFailedResponse ( conn . getRemoteAddress ( ) , e ) ) ; logger . error ( "Exception caught when sending invocation, id={}" , requestId , e ) ; } RemotingCommand response = future . waitResponse ( timeoutMillis ) ; if ( response == null ) { conn . removeInvokeFuture ( requestId ) ; response = this . commandFactory . createTimeoutResponse ( conn . getRemoteAddress ( ) ) ; logger . warn ( "Wait response, request id={} timeout!" , requestId ) ; } return response ; }
Synchronous invocation

@param conn
@param request
@param timeoutMillis
@return
@throws InterruptedException
@throws RemotingException
Synchronous invocation