Apache Thrift 是一个由 Facebook 开发、现为 Apache 顶级项目的跨语言服务开发框架,它通过一个中间语言(IDL,接口定义语言)来定义数据类型和服务接口,并能够生成多种编程语言(如 C++, Java, Python, Go, Ruby 等)的客户端和服务端代码,极大地简化了不同系统间、不同语言间的通信与数据交换,在 CentOS 系统上安装 Thrift,推荐采用源码编译的方式,这样可以获取最新的稳定版本并按需定制功能。

环境准备
在开始编译安装之前,确保您的 CentOS 系统已安装必要的编译工具和依赖库,这些依赖是 Thrift 核心功能及其支持多种语言的基石,您可以通过 yum 或 dnf(取决于您的 CentOS 版本)来安装它们。
安装开发工具组,这包含了 GCC、Make 等基础编译器:
sudo yum groupinstall -y "Development Tools"
或对于 CentOS 8/Rocky Linux 8+:
sudo dnf groupinstall -y "Development Tools"
安装 Thrift 编译所需的核心依赖库,缺少任何一个都可能导致编译失败。
| 包名 | 用途 |
|---|---|
boost-devel |
C++ 标准库的扩展,Thrift 的 C++ 实现强依赖 |
libevent-devel |
高性能事件通知库,用于 Thrift 的异步网络服务 |
openssl-devel |
OpenSSL 开发包,用于支持 SSL/TLS 加密通信 |
zlib-devel |
zlib 压缩库的开发包,用于数据压缩功能 |
autoconf automake libtool |
自动化构建工具,用于生成 Makefile |
bison flex |
语法分析器和词法分析器生成器,用于解析 Thrift IDL 文件 |
pkgconfig |
提供库的配置信息,便于编译时查找 |
使用以下命令一次性安装所有这些依赖:
sudo yum install -y boost-devel libevent-devel openssl-devel zlib-devel autoconf automake libtool bison flex pkgconfig
编译安装 Thrift
准备工作完成后,我们就可以开始下载 Thrift 源码并进行编译安装了,本文以 Thrift 0.17.0 版本为例。
下载源码包
从 Apache Thrift 官方网站或镜像站点下载您需要的版本,推荐使用 wget 命令直接在服务器上下载。
wget https://archive.apache.org/dist/thrift/0.17.0/thrift-0.17.0.tar.gz
解压并进入目录

tar -zxvf thrift-0.17.0.tar.gz cd thrift-0.17.0
配置编译选项
这是定制 Thrift 功能的关键步骤,执行 ./configure 脚本来检查系统环境并生成 Makefile,Thrift 支持非常多的语言,默认情况下可能会启用所有可用语言的支持,为了加快编译速度或仅构建您需要的语言,可以添加特定的参数。
一些常用的配置选项如下表所示:
| 配置选项 | 描述 |
|---|---|
--with-cpp |
启用 C++ 语言支持 (通常默认启用) |
--with-java |
启用 Java 语言支持 |
--with-python |
启用 Python 语言支持 |
--with-go |
启用 Go 语言支持 |
--with-ruby |
启用 Ruby 语言支持 |
--with-nodejs |
启用 Node.js 语言支持 |
--with-qt4 或 --with-qt5 |
启用 Qt4/Qt5 支持 |
--with-libevent |
启用 libevent 非阻塞IO服务 (推荐) |
--with-ssl |
启用 OpenSSL 支持,用于加密通信 |
如果您只想为 C++、Python 和 Java 生成代码,可以运行:
./configure --with-cpp --with-python --with-java --with-libevent --with-ssl
如果没有任何特殊需求,直接运行 ./configure 即可,它会自动检测并启用所有找到的语言环境。
编译与安装
配置成功后,使用 make 命令进行编译,然后使用 make install 将编译好的文件安装到系统中(默认为 /usr/local/bin 和 /usr/local/lib)。
make sudo make install
编译过程可能需要几分钟时间,具体取决于您的 CPU 性能和选择的模块。
验证安装 安装完成后,通过以下命令验证 Thrift 是否已成功安装并能正常运行:
thrift --version
如果屏幕上输出类似 Thrift version 0.17.0 的信息,恭喜您,Thrift 已经成功安装在您的 CentOS 系统上了。

简单使用示例
让我们创建一个简单的 Thrift IDL 文件 demo.thrift,并尝试生成 Python 代码。
创建 IDL 文件
echo 'namespace py demo
service UserStorage {
void store(1: i32 user_id, 2: string name),
string retrieve(1: i32 user_id)
}' > demo.thrift
生成代码
使用 thrift 命令为 Python 生成代码:
thrift --gen py demo.thrift
执行后,当前目录下会生成一个 gen-py 的文件夹,里面包含了根据 demo.thrift 定义自动生成的 Python 服务端和客户端脚手架代码,您可以直接在此基础上进行业务逻辑开发。
相关问答 (FAQs)
问题1:编译过程中提示找不到某个依赖库(如 boost、openssl 等)怎么办?
解答: 这是安装过程中最常见的问题,这通常意味着您缺少该库的开发头文件和链接库,请确保您已经安装了对应的 -devel 包,boost-devel、openssl-devel,您可以先通过 yum search <library_name>-devel 查找确切的包名,然后使用 sudo yum install 进行安装,安装完成后,删除之前解压的 Thrift 源码目录,重新解压并从 ./configure 步骤开始执行。
问题2:如何为特定语言(如 Java、Go)生成代码?
解答: 这是一个两步过程,在编译安装 Thrift 时,必须在 ./configure 阶段明确指定需要支持的语言,./configure --with-java --with-go,如果忘记添加,thrift 命令将不支持为该语言生成代码,在生成代码时,使用 --gen 参数指定目标语言,例如为 Java 生成代码使用 thrift --gen java your_file.thrift,为 Go 生成代码则使用 thrift --gen go your_file.thrift,确保您已正确安装了目标语言的开发环境(如 JDK)。