使用Apache Thrift Async Client读取调用帧大小失败问题

时间:2016-08-24 20:15:47

标签: java server jersey client thrift

我正在开发Apache Thrift服务器/异步客户端应用程序。 但是当我调用异步方法回调时,我收到了这个错误:

java.io.IOException: Read call frame size failed
at org.apache.thrift.async.TAsyncMethodCall.doReadingResponseSize(TAsyncMethodCall.java:234)
at org.apache.thrift.async.TAsyncMethodCall.transition(TAsyncMethodCall.java:192)
at org.apache.thrift.async.TAsyncClientManager$SelectThread.transitionMethods(TAsyncClientManager.java:143)
at org.apache.thrift.async.TAsyncClientManager$SelectThread.run(TAsyncClientManager.java:113)

我在这里做了一些关于stackoverflow的研究,但没有什么对我有用。

这是我的服务器代码:

/**
 * initialisiert die @see {ClientAccessPointImpl} Verbindung, damit der Client eine Verbindung mit dem Serve
 * aufbauen kann
 */
private void initialisiereThriftServer( )
{
    clientAccessPoint = new LoginAndRegisterServiceImpl();
    processor = new Processor<>( clientAccessPoint );

    Runnable server = new Runnable()
    {

        @Override
        public void run( )
        {
            try
            {

                TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(
                        ApplicationConfigurationLoader.getIntProperty( "core.thrift.port" ) );
                TProtocolFactory protocolFactory = new TBinaryProtocol.Factory();
                TServer server = new TThreadedSelectorServer( new TThreadedSelectorServer.Args( serverTransport )
                        .protocolFactory( protocolFactory ).inputTransportFactory( new TFramedTransport.Factory() )
                        .outputTransportFactory( new TFramedTransport.Factory() ).processor( processor )
                        .workerThreads(
                                ApplicationConfigurationLoader.getIntProperty( "core.thrift.workerThreads" ) ) );
                server.serve();
            }
            catch ( TTransportException e )
            {
                LOGGER.log( Level.SEVERE , "Der Server konnte nicht gestartet werden!" , e );
            }

        }
    };

    new Thread( server ).start();
}

有谁知道为什么这段代码失败了?我使用了一个使用TFramedTransport的NonblockingSocket,我读到了这个....

希望你能帮助我! 纳斯

2 个答案:

答案 0 :(得分:0)

以上代码对我来说很好看。由于您没有附加处理器的代码,我认为这是异常的来源。请确保您使用的是AsyncProcessor,而不仅仅是Processor

答案 1 :(得分:0)

服务器Processor无关紧要,因为这是服务器代码而不是客户端的处理方式。

确保以相同的方式配置客户端。二进制与压缩,框架等