2016-08-24 4 views
0

im Entwickeln einer Apache Thrift Server/Async Client-Anwendung. Aber , wenn ich von der Asynchron-Methode Rückruf rufen, bekam ich diese Fehlermeldung:Gelesene Callframe-Größe fehlgeschlagenes Problem mit Apache Thrift Async Client

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) 

ich tat etwas Forschung hier auf Stackoverflow, aber nichts funktioniert für mich.

Das ist mein Server-Code:

/** 
* 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(); 
} 

Hat jemand eine Ahnung, warum dieser Code failed? Ich benutzte eine NonblockingSocket, die einen TFRamedTransport verwenden, ich las darüber ....

Hoffe, Sie können mir helfen! Jonas

Antwort

0

Der obige Code sieht gut aus für mich. Da Sie den Code für den Prozessor nicht angehängt haben, gehe ich davon aus, dass die Ausnahme davon kommt. Bitte stellen Sie sicher, Sie verwenden AsyncProcessor anstelle von einfach Processor

+0

ja Sie haben Recht, ich benutze den normalen Prozessor anstelle des AsyncProcessor. Ich habe Probleme, die richtige Verwendung von diesem zu finden, können Sie mir ein Beispiel geben, wie ich einen asyncProcessor implementieren muss? – Dudei95

+0

@Dudei95 könnte es so etwas wie 'CreditManager.AsyncProcessor Prozessor = neue CreditManager.AsyncProcessor (Service);' wo "Service" ist eine Instanz von "CreditManagerService" –

+0

@ Dudei95 bitte als Antwort markieren ist es funktioniert –

Verwandte Themen