Apache Thrift - java开发教程

来源:互联网 发布:淘宝怎么提高收藏宝贝 编辑:程序博客网 时间:2024/06/15 09:44

1.开发所需要的jar包:

        <dependency>            <groupId>org.apache.thrift</groupId>            <artifactId>libthrift</artifactId>            <version>0.9.0</version>        </dependency>         <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-api</artifactId>            <version>1.7.12</version>        </dependency

2. 安装Thrift环境:

安装thrift:到thrift官网下载exe文件,然后将文件重命名为thrift.exe,拷贝到c:\windows目录下(或者任何目录下),然后就可以在dos环境下使用了

c:\windows>thrift -gen java D:\mywork\javaProject\thriftTest\hello.thrift ,输出的java文件默认输出到当前目录下c:\windows,也可以使用-o参数指定输出路径


3.编写thrift 接口文件:

 namespace java com.wolong.thrift  service Hello{            string helloString(1:string para)            i32 helloInt(1:i32 para)            bool helloBoolean(1:bool para)            void helloVoid()            string helloNull()          }


4.生成代码:

在wondows cmd中,切换到thrift.exe所在目录,运行一下代码:

thrift -o <output directory> -gen java Hello.thrift
注意:.thrift文件要与thrift.exe放在同一目录下
完成后在指定目录下会生成一个目录gen-java,里面有Hello.java。


5.创建工程:

打开Eclipse或者Myeclipse,创建一个Java工程:导入刚才生成的Hello.java文件。


5.1  编写HelloServiceImpl 接口,接口实现Thrift定义文件中的服务。

import org.apache.thrift.TException;public class HelloServiceImpl implements Hello.Iface{    public boolean helloBoolean(boolean para) throws TException{        return para;    }    public int helloInt(int para) throws TException{        try {            Thread.sleep(20000);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return para;    }        public String helloNull() throws TException{        return null;    }        public String helloString(String para) throws TException{        return para;    }        public void helloVoid() throws TException{        System.out.println("Hello World!");    }}


5.2 编写服务器端

import org.apache.thrift.TProcessor;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.protocol.TBinaryProtocol.Factory;import org.apache.thrift.server.TServer;import org.apache.thrift.server.TSimpleServer;import org.apache.thrift.server.TThreadPoolServer;import org.apache.thrift.server.TThreadPoolServer.Args;import org.apache.thrift.transport.TServerSocket;import org.apache.thrift.transport.TServerTransport;import org.apache.thrift.transport.TTransportException;public class HelloServiceServer {    /**     * 启动thrift服务器     * @param args     */    public static void main(String[] args) {                try{        //设置服务器端口为7911        TServerSocket serverTransport = new TServerSocket(7911);        //设置协议工厂为TBinaryProtocol.Factory        Factory proFactory = new TBinaryProtocol.Factory();        //关联处理器与Hello服务的实现        TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl());        TServer.Args tArgs = new TServer.Args(serverTransport);        tArgs.processor(processor);        tArgs.protocolFactory(proFactory);        //使用TSimpleServer        TServer server = new TSimpleServer(tArgs);        System.out.println("Start server on port 7911....");        server.serve();        }catch(TTransportException e){            e.printStackTrace();        }            }}

5.3 编写客户端

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;public class HelloServiceClient {    /**     * 调用Hello服务     * @param args     */    public static void main(String[] args) {                        try {            //设置调用的服务器为本地,端口为7911            TTransport transport = new TSocket("localhost", 7911);            transport.open();            //设置传输协议为TBinaryProtocol            TProtocol protocol = new TBinaryProtocol(transport);            Hello.Client client = new Hello.Client(protocol);            client.helloVoid();            transport.close();                    } catch (TTransportException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (TException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

5.4 运行结果

先运行服务器端,再运行客户端;

结果:Start server on port 7911....                      

Hello World!


二 : 服务模型实例演示(java)

 注:Hello.java  /  HelloServiceImpl.java 见上生成的代码;

2.1  TSimpleServer服务端:单线程服务器端使用标准的阻塞式 I/O,简单的单线程服务模型

2.2  TThreadPoolServer 服务模型:线程池服务模型(多线程服务器端使用标准的阻塞式I/O),使用标准的阻塞式IO,预先创建一组线程处理请求

2.3  TNonblockingServer 服务模型/多线程服务器端使用非阻塞式 I/O :使用非阻塞式IO,服务端和客户端需要指定 TFramedTransport 数据传输的方式。

2.4  THsHaServer 服务模型:半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。

2.5  AsynClient 异步客户端



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 护士面试时被问到病人坠床怎么办 三次元仪器坏了怎么办 运动同手同脚怎么办 狗狗突然害怕不敢走路怎么办 一岁半宝宝因为害怕不敢走路怎么办 猫把背拱起来怎么办 穿猫跟鞋走路不稳怎么办 狗狗后腿内八字怎么办 快走后小腿粗了怎么办? 猫的嘴巴烂了怎么办 苹果8丢了已关机怎么办 肚子吃多了难受怎么办 喝水喝的肚子胀怎么办 肚子吃撑了难受怎么办 肚子撑得想吐怎么办 吃饭吃的太饱怎么办 吃饭吃的太撑怎么办 跑步迈不开步子怎么办 踏步走步子反了怎么办 微信不支持计步怎么办 肝癌二次介入后头晕心慌怎么办 跑步跑得胃疼怎么办 如果世界上的猪都死了怎么办 我和我老婆吵架怎么办 我和我老婆吵架了怎么办 智障人士父母死后怎么办 依赖性太强的人怎么办 高考只有一门写准考证号怎么办 ps做动画不流畅怎么办 ff15引擎剑卖了怎么办 fgo从者满了怎么办 游泳池的水喝了怎么办 月球没有水怎么办秒懂 请了新财神旧的怎么办 报警校体检没过怎么办 ae中建立了文本打不出字怎么办 宝宝3岁内八字怎么办 一岁半宝宝走路内八字怎么办 一岁宝宝走路内八字怎么办 宝宝1岁了内八字怎么办 宝宝学走路内八字怎么办