thrift是应用较广的RPC框架,最初由Facebook发布,后交由Apache维护。为了和thrift服务互通,同时解决thrift原生方案在多线程安全、易用性、并发能力等方面的一系列问题,brpc实现并支持thrift在NonBlocking模式下的协议(FramedProtocol), 下文均直接称为thrift协议。

示例程序:

相比使用原生方案的优势有:

  • 线程安全。用户不需要为每个线程建立独立的client.
  • 支持多种连接方式(连接池, 短连接), 支持超时、backup request、取消、tracing、内置服务等一系列RPC基本福利.
  • 性能更好.

编译

brpc默认不启用thrift支持也不需要thrift依赖。但如果需用thrift协议, 配置brpc环境的时候需加上—with-thrift或-DWITH_THRIFT=ON.

Linux下安装thrift依赖先参考安装好必备的依赖和工具,然后从官网下载thrift源代码,解压编译。

配置brpc支持thrift协议后make。编译完成后会生成libbrpc.a, 其中包含了支持thrift协议的扩展代码, 像正常使用brpc的代码一样链接即可。

Client端访问thrift server

基本步骤:

  • 创建一个协议设置为brpc::PROTOCOL_THRIFT的Channel
  • 使用原生Request和原生Response>发起访问示例代码如下:

Server端处理thrift请求

用户通过继承brpc::ThriftService实现处理逻辑,既可以调用thrift生成的handler以直接复用原有的函数入口,也可以像protobuf服务那样直接读取request和设置response。

实现好thrift service后,设置到ServerOptions.thrift_service并启动服务

简单的和原生thrift性能对比实验