安装开发环境
sudo yum -y groupinstall "Development Tools"
安装bison
sudo yum install -y wget
安装autoconf
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr
make
sudo make install
cd ..
安装automake
wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
tar xvf automake-1.14.tar.gz
cd automake-1.14
./configure --prefix=/usr
make
sudo make install
cd ..
安装 bison
wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
tar xvf bison-2.5.1.tar.gz
cd bison-2.5.1
./configure --prefix=/usr
make
sudo make install
cd ..
安装c++
sudo yum -y install libevent-devel zlib-devel openssl-devel
安装boost
wget http://sourceforge.net/projects/boost/files/boost/1.56.0/boost_1_56_0.tar.gz
tar xvf boost_1_56_0.tar.gz
cd boost_1_56_0
./bootstrap.sh
sudo ./b2 install
编译 Thrift
git clone https://github.com/apache/thrift.git
cd thrift
./bootstrap.sh
./configure --with-lua=no
make
sudo make install
MACOS安装
brew install thrift
定义接口文件
接口文件详情定义 Apache Thrift - Interface Description Language (IDL)
例子:ExchangeData.thrift
service ExchangeData { string dataConversion( 1 : string jsonData) }
例子说明:
提供一个数据接口,接口名称为dataConversion ,概接口有1个参数,该参数为字符类型 参数名称为jsonData,返回类型为String。
RpcServer服务端(python)
生成python代码
thrift --gen py ExchangeData.thrift
生成例子如下:
gen-py/
├── ExchangeData
│ ├── constants.py
│ ├── ExchangeData.py
│ ├── ExchangeData-remote
│ ├── __init__.py
│ └── ttypes.py
└── __init__.py
发布服务
from thrift.protocol import TBinaryProtocol from thrift.server import TServer from thrift.transport import TSocket from thrift.transport import TTransport from ExchangeData import ExchangeData class ExchangeDataHandler: def __init__ ( self ): pass """ 定义的接口必须和定义的文件一致 """ def dataConversion( self , jsonData ): """ 编写业务逻辑""" ret = "test" return ret # handler processer类 exchangeDataHandler = ExchangeDataHandler() processor = ExchangeData.Processor(exchangeDataHandler) """ 客户端和服务端的地址和端口必须一致 """ transport = TSocket.TServerSocket( "127.0.0.1" , 8989 ) # 传输方式,使用buffer tfactory = TTransport.TBufferedTransportFactory() # 传输的数据类型:二进制 pfactory = TBinaryProtocol.TBinaryProtocolFactory() # 创建一个thrift 服务~ server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory) print ( "Starting thrift server in python..." ) server.serve() print ( "done!" )
RpcClinet端(java)
生成java代码
thrift --gen java ExchangeData.thrift
生成例子:
gen-java
└── ExchangeData.java
客户端调用
M aven依赖
< dependency > < groupId > org.apache.thrift </ groupId > < artifactId > libthrift </ artifactId > < version > 0.14.0 </ version > </ dependency >
客户端调用例子
package org.example; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; import org.apache.thrift.transport.TTransportException; /** * Hello world! */ public class ThriftClient { public void startClient() { TTransport transport; try { System. out .println( "thrift client connext server at 8989 port " ); /** * 必须和服务端端地址和端口一致 */ transport = new TSocket( "127.0.0.1" , 8989 ); TProtocol protocol = new TBinaryProtocol(transport); /** * 构建客户端例子 */ ExchangeData.Client client = new ExchangeData.Client(protocol); transport.open(); /** * 调用接口 */ System. out .println(client.dataConversion( "11111111" )); transport.close(); System. out .println( "thrift client close connextion" ); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { e.printStackTrace(); } } public static void main(String[] args) { System. out .println( "thrift client init " ); ThriftClient client = new ThriftClient(); System. out .println( "thrift client start " ); client.startClient(); System. out .println( "thrift client end " ); } }
如果对您有所帮助,请点赞打赏支持!
技术合作交流qq:2401315930