关于thrift,可能一般情况下用到的人不多,不过在类似于facebook这样的大型系统中,需要一个统一的数据接口去连接内部的各个子系统,这个时候中间件就必不可少了,thrift主要用于rpc类的中间件,当然自己定义理论上也可以用来做异步消息处理的底层,异步消息这方面成熟的开源产品还是很多的,比如rabbitmq之类的,大公司也大多数有参考或在使用自己开发的对应产品。
在rpc中间件本身层面来说,个人之前比较熟悉的是zeroc的ICE中间件,不过随着时间的推移,facebook的thrift越来越惹人喜欢,更原始的接口(ice这方面虽然号称轻量级的中间件,不过thrift似乎更轻量,基本上和java中的mina属于一个量级的作品,同时也得承认ice帮程序员做了更多的通用工作,更易于使用),社区支持(当时ice的官方论坛注册是需要你有企业/教育系统信息并通过管理员确认的),语言支持更多(thrift直接支持erlang),开源(thrift是Apache 2.0 的License,而ice有GPL和商业两种License,但是这种两手做法个人反倒更看好前者thrift的发展)。
废话说完了,开始做thrift配置。
总体来说thrift的安装流程比较简单:
目前的release0.2.0版貌似在mail list里讨论的时候还有一些小bug,我还是上官方svn checkout 的主线代码:
svn co http://svn.apache.org/repos/asf/incubator/thrift/trunk thrift
然后开始编译,编译前{zh0}看一下README,如果编译流程有变动以README为准。
编译基本上就是整体编译一遍,然后根据你需要的语言库(c++/java/ruby/python/php/perl/erlang/c#等)进入lib下分别编译你需要的语言中用的lib库,然后加入到你需要的语言客户端去用即可。
编译前检测一下,可能需要手动安装boost开发库bison(yacc解析器) flex(lex词汇生成器)等相关工具:
sudo apt-get install libboost-dev automake libtool flex bison pkg-config g++
java的话建议加上ant,ivy,libslf4j-java和libcommons-lang-java,其中slf4j基本上封装了很多种logger,比如常用的log4j等,安装的时候也可以带上log4j:
sudo apt-get install ant ivy libslf4j-java libcommons-lang-java liblog4j1.2-java
在你的/etc/environment中的CLASSPATH中添加一下这些jar包的调用:
CLASSPATH=/usr/share/java/ant.jar:/usr/share/java/commons-lang.jar:/usr/share/java/ivy.jar:/usr/share/java/log4j-1.2.jar:/usr/share/java/slf4j-api.jar:/usr/share/java/slf4j-log4j12.jar
开始thrift的编译安装,我libevent是手工编译安装在/usr/local下的需要指定一下:
cd thrift
./bootstrap.sh
./configure --with-libevent=/usr/local
make
sudo make install
然后我们来分别编译几个语言的支持。
先来php的thrift协议扩展,thrift的TSocketPool类用到了apc扩展中的方法apc_fetch(), apc_store(),注意如果没有的话需要先安装一下,开始安装:
cd lib/php/src/ext/thrift_protocol
phpize
./configure --enable-thrift_protocol
make
sudo make install
cd ../../../../../
安装完了后修改你的php.ini文件:
sudo vi /usr/local/php/etc/php.ini
加入扩展的设定:
[thrift_protocol] extension=thrift_protocol.so
如果你运行了php-fpm,重启一下php-fpm的进程管理:
sudo /etc/init.d/php-fpm restart
纯粹cli应用的话可以直接检测一下扩展有否载入:
php -m |grep thrift
至此php部分的安装成功。
python的部分,安装比较简单,和通常的安装包差不多:
cd lib/py
python setup.py build
sudo python setup.py install
cd ../../
java的部分如果你前面编译没有问题的话,此时libthrift.jar应该已经被安装到/usr/local/lib下了,可以简单的做个软链接:
sudo ln -s /usr/local/lib/libthrift.jar /usr/share/java/libthrift.jar
另一种方法是到lib/java下去编译了拷贝过去:
cd lib/java
ant
sudo cp libthrift.jar /usr/share/java/
{zh1}在环境变量中添加引用即可:
CLASSPATH=/usr/share/java/libthrift.jar
记得source一下应用新的环境变量。
至此几个比较常用的语言的thrift配置就搞定了,下一步就是根据具体的应用去做对应的开发了。
引用地址:
要说点啥就在这吧