Thrift 是facebook的核心技术之一,使用不同开发语言开发的系统可以通过该框架实现彼此间的通讯,开发者只需编辑一份thrift脚本,即可自动获得其它开发语言的代码(比如 c++ java python ruby c# haskell ocmal erlang cocoa php squeak).同时提供了完整的rpc service framework,可以很方便的直接构建服务。
简单实现一个User Activity的log服务和客户端,只是作简单的演示,所以没有实现异步调用等缓冲机制(比如Queue),具体实现可以根据自己的情况定制。
目标:实现一个user activity log 服务。
step 1:安装Thrift
step 2:编写Thrift脚本,存为DataReceiver.thrift
namespacejavathrift.test
structActivity{
1:i64uid,
2:i32type,
3:i64timestamp,
4:map<string,string>maps, }
service DataReceiver{
onewayvoidpostData(1:Activityac),
onewayvoidpostDataArray(1:list<Activity>arg), }
|
step 3:生成代码
thrift--genjavaDataReceiver.thrift
|
step 4:根据需要,编写自己的代码
a.server实现类
packagecom.happyelements.DataCenter;
importjava.util.List;
importorg.apache.thrift.TException;
publicclassDataServerImplimplementsDataReceiver.Iface{
@Override publicvoidpostData(Activityac)throwsTException{ // TODO Auto-generated method stub //这里写自己的定制代码
}
@Override publicvoidpostDataArray(List<Activity>arg)throwsTException{ // TODO Auto-generated method stub //这里写自己的定制代码 longtime=System.currentTimeMillis(); System.out.println("postDataArray
called timestamp: "+time); List<Activity>activities=arg; System.out.println("len
= "+activities.size()); for(inti=0;i<activities.size();i++){ Activityac=activities.get(i); System.out.println(ac.getUid()); System.out.println(ac.getType()); System.out.println(ac.getMaps().get("foo")); } } }
|
b.服务器
packagecom.happyelements.DataCenter;
importorg.apache.thrift.protocol.TBinaryProtocol; importorg.apache.thrift.protocol.TBinaryProtocol.Factory; importorg.apache.thrift.server.TServer; importorg.apache.thrift.server.TThreadPoolServer; importorg.apache.thrift.transport.TServerSocket; importorg.apache.thrift.transport.TTransportException;
publicclassDataServer{
privatevoidstart(){ try{
TServerSocket serverTransport=newTServerSocket(8811);
DataReceiver.Processor processor=newDataReceiver.Processor(newDataServerImpl());
Factory protFactory=newTBinaryProtocol.Factory(true,true);
TServerserver=newTThreadPoolServer(processor,serverTransport,protFactory); System.out.println("Starting
server on port 8811 ..."); server.serve(); }catch(TTransportException e){
e.printStackTrace(); }catch(Exceptione){
e.printStackTrace(); } } /**
* @param args
*/ publicstaticvoidmain(String[]args){ // TODO Auto-generated method stub
DataServer srv=newDataServer();
srv.start(); }
}
|
c.客户端
packagecom.happyelements.DataCenter;
importjava.util.ArrayList; importjava.util.HashMap; importjava.util.List; importjava.util.Map;
importorg.apache.thrift.TException; importorg.apache.thrift.protocol.TBinaryProtocol; importorg.apache.thrift.protocol.TProtocol; importorg.apache.thrift.transport.TSocket; importorg.apache.thrift.transport.TTransport; importorg.apache.thrift.transport.TTransportException;
importcom.happyelements.DataCenter.DataReceiver.Client;
publicclassTestClient{ privatevoidstart(){
TTransport transport; try{
transport=newTSocket("localhost",8811);
TProtocol protocol=newTBinaryProtocol(transport);
Client client=newClient(protocol);
transport.open(); List<Activity>la=newArrayList<Activity>(); Activityac=newActivity();
ac.setType(1);
ac.setUid(12345); Map<String,String>map=newHashMap<String,String>(); map.put("foo","blablabla...");
ac.setMaps(map);
la.add(ac);
client.postDataArray(la);
transport.close(); }catch(TTransportException e){
e.printStackTrace(); }catch(TException e){
e.printStackTrace(); } }
publicstaticvoidmain(String[]args){
TestClient c=newTestClient();
c.start(); } }
|
以上代码需要的jar包:
libthrift.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
log4j-1.2.15.jar
ok. thats all.
分享到:
相关推荐
spark-hive-thriftserver_2.11-2.1.spark-hive-thrift
Thrift java demo实例,通过简单的例子,帮助初学者理解Thrift
spark-hive_2.11-2.3.0...spark-hive-thriftserver_2.11-2.3.0.jar log4j-2.15.0.jar slf4j-api-1.7.7.jar slf4j-log4j12-1.7.25.jar curator-client-2.4.0.jar curator-framework-2.4.0.jar curator-recipes-2.4.0.jar
java代码使用thrift2操作hbase示例,thrift2连接hbase添加数据,单条查找,删除数据,根据扫描器查找,修改数据等测试实例
采用java操作thrift代码示例
本设计源码提供了一个基于Scala的Spark Thrift Server。项目包含12731个文件,...该系统适合用于学习和实践Scala、Java、Python、Shell、JavaScript、CSS、HTML、Ruby和C技术,以及开发Spark Thrift Server相关的系统。
thrift特性、不支持的特性、对各个语言的支持情况、语法参考、Thrift 架构、协议、传输层、服务端类型、各种thriftServer实现的比较、Thrift对多接口服务的支持
spark和hive结合依赖,如何使用请看我博客https://blog.csdn.net/z1987865446/article/details/109372818
支持mysql8.x,使用utf8mb4编码。
< dependency> < groupId>com.didiglobal.thriftmock</ groupId> < artifactId>thrift-mock-server4junit</ artifactId> < version>1.0.2</ version> </ dependency> 在没有junit的情况下工作 ...
一个java和python的thrift例子,其中java作为服务端,python作为客户端
一组用thrift写的Java RPC框架,是两个maven项目,直接可以用,可以传字符串。 方便初学者了解thrift RPC各部分的原理,如果想自己加功能,就要新建XX.thrift文件,定义好接口,用用thrift生成
Thrift双向通讯java代码
NULL 博文链接:https://onlyor.iteye.com/blog/1700777
thrift java build jar
SparkSQL的分布式执行引擎(Spark ThriftServer)
modified thrift server , support rest , http protocol with json content . support multi oracle db
通过java api 接口 利用thrift读取hbase表中的数据 解压后包含两个文件 一个是实验步骤文档 一个是java 代码
thrift-server 最简单的测试案例
Thrift0.9.1 示例代码 Java版本 Thrift0.9.1 示例代码 Java版本