Thirft简单使用
安装Thrift
到thrift官网下载thrift.exe
http://thrift.apache.org/download


将thrift-0.10.0.exe复制到C:\Program Files\thrift 并改名为thrift.exe

配置环境变量

打开dos窗口输入thrift -version 查看thrift安装版本,出现下图,则成功

使用Thrift
编写thrift接口文件并生成java文件
编写thrift接口文件HelloWorld.thrift,并放在D盘aaa文件夹下
namespace java com.thrift.demo
service HelloWorldService {
string sayHello(1:string username)
}

运行命令thrift -o D:\aaaa -gen java D:\aaa\HelloWorld.thrift
说明:使用-o参数指定输出路径

在aaaa下就会生成所需要的java文件


使用由Thrift文件生成的java文件
将接口文件拷贝到自己的工程中,并导入相关jar包
Thriftjar包下载地址如下,可以修改版本号来下载与exe版本对应的jar包
http://repo1.maven.org/maven2/org/apache/thrift/libthrift/0.10.0/

编写接口实现代码
package com.thrift.demo;
import org.apache.thrift.TException;
import com.thrift.demo.HelloWorldService.Iface;
public class HelloWorldServiceImpl implements Iface{
private static int count = 0;
@Override
public String sayHello(String username) throws TException {
count += 1;
System.out.println("get " + username + " " +count);
return "hello " + username + " " + count;
}
}
编写server代码
Thrift相关jar包下载:https://github.com/xiaorenwu-dashijie/Thrift.git
package com.thrift.demo; import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException; import com.thrift.demo.HelloWorldService;
import com.thrift.demo.HelloWorldService.Processor; public class Server {
public void startServer() {
try {
System.out.println("thrift server open port 1234");
TServerSocket serverTransport = new TServerSocket(1234);
HelloWorldService.Processor process = new Processor(new HelloWorldServiceImpl());
Factory portFactory = new TBinaryProtocol.Factory(true, true);
Args args = new Args(serverTransport);
args.processor(process);
args.protocolFactory(portFactory);
TServer server = new TThreadPoolServer(args);
server.serve();
} catch (TTransportException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
System.out.println("thrift server init");
Server server = new Server();
System.out.println("thrift server start");
server.startServer();
System.out.println("thrift server end");
}
}
编写client 代码
package com.thrift.demo; 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; import com.thrift.demo.HelloWorldService; public class Client {
public void startClient() {
TTransport transport;
try {
System.out.println("thrift client connext server at 1234 port ");
transport = new TSocket("localhost", 1234);
TProtocol protocol = new TBinaryProtocol(transport);
HelloWorldService.Client client = new HelloWorldService.Client(protocol);
transport.open();
System.out.println(client.sayHello("panguso"));
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 ");
Client client = new Client();
System.out.println("thrift client start ");
client.startClient();
System.out.println("thrift client end ");
}
}
运行server和client代码
启动server端

启动client端

Server端输出

Thirft简单使用的更多相关文章
- 简单理解 RPC(转载)
原文地址:http://www.syyong.com/architecture/Simple-understanding-of-RPC.html RPC(Remote Procedure Call P ...
- Rpc简单入门
RPC这个概念大家都应该很熟悉了,这里不在累述了:使用场景可以参考这篇,本篇主要分享下Thrift和Grpc在.Net Core环境下使用入门.Thirft或者Grps 都支持跨语言.跨平台的Rpc框 ...
- Thirft框架介绍
1.前言 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和 ...
- 【造轮子】打造一个简单的万能Excel读写工具
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...
- Fabio 安装和简单使用
Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
随机推荐
- AspNetCore 基于流下载文件与示例代码
昨天说了,AspNetCore如何进行上传文件,其中写了两种方式ajax与模型,其文章地址为:https://www.cnblogs.com/ZaraNet/p/9949167.html 那么既然有上 ...
- Lucene 06 - 使用Lucene的Query API查询数据
目录 1 Query对象的创建(方式一): 使用子类对象 1.1 常用的Query子类对象 1.2 常用的Query子类对象使用 1.2.1 使用TermQuery 1.2.2 使用NumericRa ...
- exec族函数详解及循环创建子进程
前言:之前也知道exec族函数,但没有完全掌握,昨天又重新学习了一遍,基本完全掌握了,还有一些父子进程和循环创建子进程的问题,还要介绍一下环境变量,今天分享一下. 一.环境变量 先介绍下环境的概念和特 ...
- Gulp介绍与入门实践
Gulp,一个基于流的构建工具. 这是自己写的一个构建的demo,只是一个纯演示的示例,并没有完成什么项目工作.下面根据这个demo介绍一下Gulp. 上代码: gulpfile.js 'use st ...
- Asp.Net SignalR Hub中的上下文对象
Hub中的 Context 使用了集线器后,会发现对比持久连接类少了OnConnectioned这样的事件,事实上是有的.需要我们去override .这下似乎发现了什么问题,记得持久连接类中有con ...
- leetcode — convert-sorted-list-to-binary-search-tree
import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...
- Mybatis动态SQL简单了解 Mybatis简介(四)
动态SQL概况 MyBatis 的强大特性之一便是它的动态 SQL 在Java开发中经常遇到条件判断,比如: if(x>0){ //执行一些逻辑........ } Mybatis应用中,S ...
- python3中time模块与datetime模块的简单用法
__author__ = "JentZhang" import time # Timestamp 时间戳 print("Timestamp 时间戳:") pri ...
- 手机端input[type=date]的placeholder不起作用
<div class="input clearfix"> <label class="fl">起始日期</label> &l ...
- vis.js 4.21.0 Timeline localization
from:http://visjs.org/timeline_examples.html https://github.com/almende/vis https://github.com/momen ...