protected Response handleServerRequest(final Request request) {
        
        LoggerUtils.printIfInfoEnabled(LOGGER, "[{}] Receive server push request, request = {}, requestId = {}",
                rpcClientConfig.name(), request.getClass().getSimpleName(), request.getRequestId());
        lastActiveTimeStamp = System.currentTimeMillis();
        for (ServerRequestHandler serverRequestHandler : serverRequestHandlers) {
            try {
                Response response = serverRequestHandler.requestReply(request, currentConnection);
                
                if (response != null) {
                    LoggerUtils.printIfInfoEnabled(LOGGER, "[{}] Ack server push request, request = {}, requestId = {}",
                            rpcClientConfig.name(), request.getClass().getSimpleName(), request.getRequestId());
                    return response;
                }
            } catch (Exception e) {
                LoggerUtils.printIfInfoEnabled(LOGGER, "[{}] HandleServerRequest:{}, errorMessage = {}",
                        rpcClientConfig.name(), serverRequestHandler.getClass().getName(), e.getMessage());
                throw e;
            }
            
        }
        return null;
    }
@Test
    void testHandleServerRequestWhenExceptionThenThrowException() throws RuntimeException {
        assertThrows(RuntimeException.class, () -> {
            RpcClient rpcClient = buildTestNextRpcServerClient();
            Request request = new Request() {
                @Override
                public String getModule() {
                    return null;
                }
            };
            rpcClient.serverRequestHandlers.add((req, conn) -> {
                throw new RuntimeException();
            });
            rpcClient.handleServerRequest(request);
        });
    }