thriftserver抛出异常TTransportException但是没有具体的errormsg

最近发现数据服务日志大量报出thrift异常,抛出TTransportException,定位到thrift源代码thrift/server/TThreadPoolServer.h中,发现代码作者是这样写的。

if (!processor_->process(input_, output_, connectionContext) ||
            !input_->getTransport()->peek()) {
          break;
        }
      }
    } catch (const TTransportException&) {
      // This is reasonably expected, client didn't send a full request so just
      // ignore him
      // string errStr = string("TThreadPoolServer client died: ")

是因为client发出的请求不完全,thrift的框架会自动将thrift接口文件中的方法,例如test()接口,在它生成的service文件中是这样子的:

    void test()
    {
        send_test();
        recv_test();
    }
    void send_test();
    void recv_test();

这三个接口client都可以使用,所以client可能调用了send_test()接口后,直接关闭了transport(反正没有调用recv_test()),通过这样的方式来实现异步。

就像作者代码里面写的一样:just ignore him!

猜你喜欢

转载自www.cnblogs.com/masterWuGUI/p/8964353.html