【问题标题】:TTransportException without any specific message没有任何特定消息的 TTransportException
【发布时间】:2018-06-06 03:31:04
【问题描述】:

我得到了这个异常,它没有任何特定的消息,例如“读取超时”、“连接拒绝”或“连接重置”。而且这个异常通常不会发生。

我想知道这个异常的根本原因是什么?

org.apache.thrift.transport.TTransportException 在 org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:132) 在 org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) 在 org.apache.thrift.transport.TFramedTransport.readFrame(TFramedTransport.java:129) 在 org.apache.thrift.transport.TFramedTransport.read(TFramedTransport.java:101) 在 org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) 在 org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378) 在 org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297) 在 org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:204) 在 org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69)

【问题讨论】:

    标签: java thrift


    【解决方案1】:

    relevant line in the code

     if (bytesRead < 0) { 
        throw new TTransportException(TTransportException.END_OF_FILE); 
     } 
    

    调用者无法从底层传输中读取len字节,这通常意味着远端挂断(关闭连接):

    /** 
     * Reads from the underlying input stream if not null. 
     */ 
    public int read(byte[] buf, int off, int len) throws TTransportException 
    { 
        if (inputStream_ == null) { 
            throw new TTransportException(TTransportException.NOT_OPEN, "Cannot read from null inputStream"); 
        } 
        int bytesRead; 
        try { 
            bytesRead = inputStream_.read(buf, off, len); 
        } catch (IOException iox) { 
            throw new TTransportException(TTransportException.UNKNOWN, iox); 
        } 
       if (bytesRead < 0) { 
           throw new TTransportException(TTransportException.END_OF_FILE); 
        } 
        return bytesRead; 
    } 
    

    对于服务器,您不会遇到任何表明存在问题的问题,该特定问题正是 Thrift 的工作方式。

    对于客户端,如您的示例所示,这似乎表明服务器过早地关闭了连接(客户端在TServiceClient.receiveBase() 中等待接收响应)。

    最可能的原因是服务器端出现了一些未捕获的错误。另一个想到的可能来源是协议/传输堆栈不匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多