Thrift构建调用说明

news2024/10/7 10:19:29

      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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/939374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android性能优化之APK瘦身详解(瘦身73%)

公司项目在不断的改版迭代中&#xff0c;代码在不断的累加&#xff0c;终于apk包不负重负了&#xff0c;已经到了八十多M了。可能要换种方式表达&#xff0c;到目前为止没有正真的往外推过&#xff0c;一直在内部执行7天讨论需求&#xff0c;5天代码实现的阶段。你在写上个版本…

【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南

Minio的元数据 数据存储 MinIO对象存储系统没有元数据数据库&#xff0c;所有的操作都是对象级别的粒度的&#xff0c;这种做法的优势是: 个别对象的失效&#xff0c;不会溢出为更大级别的系统失效。便于实现"强一致性"这个特性。此特性对于机器学习与大数据处理非…

初阶数据结构(六)队列的介绍与实现

&#x1f493;博主csdn个人主页&#xff1a;小小unicorn&#x1f493; ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的学习足迹&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 栈 队列的介绍队列的概念&#xff1a;队…

webassembly003 ggml ADAM (暂记)

Adam优化器的工作方式是通过不断更新一阶矩估计和二阶矩估计来自适应地调整学习率&#xff0c;并利用动量法来加速训练过程。这种方式可以在不同的参数更新方向和尺度上进行自适应调整&#xff0c;从而更有效地优化模型。 https://arxiv.org/pdf/1412.6980.pdf 参数 这些参数…

SCI论文创新思路

SCI论文创新思路 一、 创新的分类1、算法创新2、架构创新3、迁移创新4、思想创新5、方法创新6、组合创新 二、组合创新的必要性三、组合创新的流程四、组合创新举例1、组合创新公式2、生活中的例子3、关于CV的例子4、魔改的方法 一、 创新的分类 1、算法创新 比如提出CNN、LS…

django-发送邮件

一、业务场景 业务警告 邮箱验证 密码找回 二、邮件相关协议 1.SMYTP&#xff08;简答邮件传输协议 25端口&#xff09; 属于“推送”协议 负责发送 2.IMAP&#xff08;交互式邮件访问协议&#xff0c;应用层协议&#xff0c;143端口&#xff09; 用于从本地邮件客户端…

华为云Stack的学习(三)

四、华为云Stack公共组件 1.华为云Stack公共负载均衡方案介绍 1.1 LVS原理 LVS是四层负载均衡&#xff0c;建立在OSI模型的传输层之上&#xff0c;所以效率非常高。 LVS有两种转发模式&#xff1a; NAT模式的转发主要通过修改IP地址&#xff08;位于OSI模型的第三层网络层&…

可直接运营的零工零活招聘流量主小程序开发演示

在互联网高速发展的今天&#xff0c;诞生了很多互联网招聘平台&#xff0c;极大的方便了企业与求职者之间的对接。而在招聘市场&#xff0c;零工灵活招聘求职也是不可忽视的一个重要组成部分。基于帮助招聘企业快速获得优质员工和求职者快速寻找合适企业&#xff0c;我们在招聘…

echarts画一个简单的饼图 中间是空的 环有两种颜色一种是底色 一种是百分比的颜色

//dom打印出来大概是什么样子下方有个图可以作为参考 ecInit(correctRate, processAnalysisVO.correctRate, (100-processAnalysisVO.correctRate));//如效果图//饼图 function ecInit(dom, correctRate, errorRate) {var dom dom; //就是你要放入的盒子元素var myChart ech…

KCC@北京|开源到底带给了我们什么?

KCC&#xff0c;全称 KAIYUANSHE City Community&#xff08;中文&#xff1a;开源社城市社区&#xff09;是由开源社发起&#xff0c;旨在让开源社区在每个城市落地生根的地域性开源组织。 自2023年2月份发起以来&#xff0c;我们已经在南京、上海、深圳、北京、硅谷、新加坡、…

postgresql类型转换函数

postgresql类型转换函数 简介CAST 函数to_date 函数to_timestamp 函数to_char 函数to_number 函数隐式类型转换 简介 类型转换函数用于将数据从一种类型转换为另一种类型。 CAST 函数 CAST ( expr AS data_type )函数用于将 expr 转换为 data_type 数据类型&#xff1b;Post…

macOS上开源免费的新闻阅读器SABnzbd

SABnzbd Mac版是一款运行在Mac平台上的开源新闻阅读器&#xff0c;这款阅读器界面简约、功效简单强大&#xff0c;使用SABnzbd时可以帮助使用Python语言编写&#xff0c;让用户使用usenet新闻组更便利&#xff0c;是你阅读新闻的好帮手&#xff01; SABnzbd具有以下主要特点&a…

Wolfram Mathematica 13 for Mac 数学计算工具

Wolfram Mathematica for Mac是一款功能强大、划时代的科学计算软件。它结合了数字和符号计算引擎、图形系统、编程语言、文本系统以及与其他应用程序的高级连接&#xff0c;在许多功能方面处于世界领先地位&#xff0c;截至2009年&#xff0c;它是使用最广泛的数学软件之一。人…

小小的消火栓 蕴藏着“大智慧”

2023年8月22日14时24分&#xff0c;天津消防救援总队指挥中心接到报警&#xff1a;天津市南开区万兴街道南京路新天地大厦外墙起火。接警后&#xff0c;总队立即调派23个消防站及南开、和平支队全勤指挥部&#xff0c;共计284名消防救援人员、62辆消防车赶赴现场。总队全勤指挥…

4G的机器上申请8G的内存,是否可以成功?

前言 4G的机器上申请8G的内存&#xff0c;是否可以成功&#xff1f;这个问题没有办法&#xff0c;是没有办法进行回答&#xff0c;这个问题要考虑三个前置条件&#xff1a; 操作系统是 32 位的&#xff0c;还是 64 位的&#xff1f;申请完 8G 内存后会不会被使用&#xff1f;…

用canvas做柱状图

<!DOCTYPE HTML> <html><head lang"en"><meta charset"UTF-8"><title>Canvans绘制统计图</title><style>body {text-align: center;}canvas {background: #ddd;}</style> </head><body><h…

为什么磁盘被写保护怎么解除?这篇文章告诉你

磁盘被写保护是指磁盘无法写入或修改数据&#xff0c;这可能会使您的计算机或存储设备无法正常工作。当发现磁盘被写保护时&#xff0c;我们应该怎么做呢&#xff1f;磁盘被写保护怎么解除&#xff1f;这篇文章将带大家了解一下磁盘被写保护的原因和对应的解除方法吧。 ▌为什…

mac使用VsCode远程连接服务器总是自动断开并要求输入密码的解决办法

在mac中使用vscode远程连接服务器&#xff0c;时常会出现自动断开并要求重新输入服务器密码的问题&#xff0c;接下来让我们来解决它&#xff1a; 1、首先&#xff0c;在本地创建公钥&#xff1a; ssh-keygen 这条命令执行之后&#xff0c;出现提示直接回车即可&#xff1b;直…

C语言练习题Day2

今天继续分享C语言刷题练习 一、选择题 1、以下程序段的输出结果是&#xff08; &#xff09; #include<stdio.h> int main() { char s[] "\\123456\123456\t"; printf("%d\n", strlen(s)); return 0; }A: 12 B: 13 C: 16 D: 以上都不对 这题考的…

monorepo更新组件报错,提示“无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本”

解决方法&#xff1a; 第一步&#xff1a;管理员身份运行 window.powershell&#xff0c; win x打开powerShell命令框&#xff0c;进入到对应项目路径。 第二步&#xff1a;执行&#xff1a;get-ExecutionPolicy&#xff0c;显示Restricted&#xff0c;表示状态是禁止的; 第…