Thrift构建调用说明

      1. 安装开发环境

sudo yum -y groupinstall "Development Tools"

      1. 安装bison

sudo yum install -y wget

      1. 安装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 ..

      1. 安装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 ..

      1. 安装 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 ..

      1. 安装c++

sudo yum -y install libevent-devel zlib-devel openssl-devel

      1. 安装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

      1. 编译 Thrift 

git clone https://github.com/apache/thrift.git

cd thrift

./bootstrap.sh

./configure --with-lua=no

make

sudo make install

    1. MACOS安装

brew install thrift

  1. 定义接口文件

接口文件详情定义 Apache Thrift - Interface Description Language (IDL)

例子:ExchangeData.thrift

service ExchangeData {
    string dataConversion(1:string jsonData)
}

例子说明:

提供一个数据接口,接口名称为dataConversion,概接口有1个参数,该参数为字符类型 参数名称为jsonData,返回类型为String。

  1. RpcServer服务端(python)
    1. 生成python代码

thrift --gen py ExchangeData.thrift

生成例子如下:

gen-py/

├── ExchangeData

│   ├── constants.py

│   ├── ExchangeData.py

│   ├── ExchangeData-remote

│   ├── __init__.py

│   └── ttypes.py

└── __init__.py

    1. 发布服务

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!")

  1. RpcClinet端(java)
    1. 生成java代码

thrift --gen java ExchangeData.thrift

生成例子:

gen-java

└── ExchangeData.java

    1. 客户端调用
      1. Maven依赖

<dependency>
  <groupId>org.apache.thrift</groupId>
  <artifactId>libthrift</artifactId>
  <version>0.14.0</version>
</dependency>

      1. 客户端调用例子

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

合抱阴阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值