thrift简单使用
来源:互联网 发布:业务数据分析报告 编辑:程序博客网 时间:2024/06/03 20:29
转载地址: http://www.micmiu.com/soa/rpc/thrift-sample/
thrift: 系统之间的数据的传输, 调用对外暴露的接口,然后获取封装的具体的业务数据结果。 一种比较灵活的RPC。
namespace java com.thrift.demoservice HelloWorldService { string sayHello(1:string username)}1)安装thrift:到thrift官网下载exe文件,然后将文件重命名为thrift.exe,拷贝到c:\windows目录下(或者任何目录下),然后就可以在dos环境下使用了
c:\windows>thrift -gen java D:\mywork\javaProject\thriftTest\test.thrift ,输出的java文件默认输出到当前目录下c:\windows,也可以使用-o参数指定输出路径
创建上面的一个thrift文件, 使用命令生成HelloWorldService.java文件。
加载需要的包。
<dependencies> <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.8</version> </dependency> </dependencies>
实现接口,
package com.thrift.demo;import org.apache.thrift.TException;public class HelloWorldImpl implements HelloWorldService.Iface{@Overridepublic String sayHello(String username) throws TException { return "Hi," + username + " ,我是服务端实现类";}}
这个就是暴露给另外系统的接口, 里面也就是自己的业务逻辑代码处理。
服务类如下:
package com.test;import org.apache.thrift.TProcessor;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.server.TNonblockingServer;import org.apache.thrift.server.TServer;import org.apache.thrift.server.TSimpleServer;import org.apache.thrift.transport.TFramedTransport;import org.apache.thrift.transport.TNonblockingServerSocket;import org.apache.thrift.transport.TServerSocket;import com.thrift.demo.HelloWorldImpl;import com.thrift.demo.HelloWorldService;public class HelloServerDemo { public static void main(String[] args) { HelloServerDemo serverDemo = new HelloServerDemo();//serverDemo.startServer(); serverDemo.startAsyServer();}public void startServer(){try{HelloWorldService.Processor<HelloWorldService.Iface> tprocessor = new HelloWorldService.Processor<HelloWorldService.Iface>(new HelloWorldImpl());// 简单单线程服务模型 ,一般用于测试TServerSocket serverTransport = new TServerSocket(8090);TServer.Args tArgs = new TServer.Args(serverTransport); tArgs.processor(tprocessor); // TProtocol 协议要对的上。 tArgs.protocolFactory(new TCompactProtocol.Factory()); TServer server = new TSimpleServer(tArgs); server.serve();}catch(Exception e){ System.out.println("Server start error!!!"); e.printStackTrace();}}/** * * @Title: startAsyServer * @Description: TODO 异步客户端对应的服务端* @param 设定文件 * @return void 返回类型 * @throws */public void startAsyServer(){try {System.out.println("HelloWorld TNonblockingServer start ....");TProcessor tprocessor = new HelloWorldService.Processor<HelloWorldService.Iface>(new HelloWorldImpl());TNonblockingServerSocket tnbSocketTransport = new TNonblockingServerSocket(8090);TNonblockingServer.Args tnbArgs = new TNonblockingServer.Args(tnbSocketTransport);tnbArgs.processor(tprocessor);tnbArgs.transportFactory(new TFramedTransport.Factory());tnbArgs.protocolFactory(new TCompactProtocol.Factory());// 使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式TServer server = new TNonblockingServer(tnbArgs);server.serve();} catch (Exception e) {System.out.println("Server start error!!!");e.printStackTrace();}}}
客户端:(单线程简单测试)
package com.test;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.protocol.TProtocol;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.TTransport;import com.thrift.demo.HelloWorldService;/*** * TBinaryProtocol : 二进制格式. TCompactProtocol : 压缩格式 TJSONProtocol : JSON格式 TSimpleJSONProtocol : 提供JSON只写协议, 生成的文件很容易通过脚本语言解析 thrift生成代码 实现接口Iface TSimpleServer服务模型 TThreadPoolServer 服务模型 TNonblockingServer 服务模型 THsHaServer服务模型 异步客户端* */public class HelloClientDemo {public static void main(String[] args) { try{ TTransport transport = new TSocket("127.0.0.1", 8090, 30000); TProtocol protocol = new TCompactProtocol(transport); HelloWorldService.Client client = new HelloWorldService.Client( protocol); transport.open(); String result = client.sayHello("小强"); System.out.println("Thrift client result =: " + result);}catch(Exception e){e.printStackTrace();} }}
异步客户端:(对应的是服务端的startAsyServer这个方法)
package com.test;import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;import org.apache.thrift.TException;import org.apache.thrift.async.AsyncMethodCallback;import org.apache.thrift.async.TAsyncClientManager;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.protocol.TProtocolFactory;import org.apache.thrift.transport.TNonblockingSocket;import org.apache.thrift.transport.TNonblockingTransport;import com.thrift.demo.HelloWorldService;import com.thrift.demo.HelloWorldService.AsyncClient.sayHello_call;public class HelloAsynClientDemo {public static final String SERVER_IP = "localhost";public static final int SERVER_PORT = 8090;public static final int TIMEOUT = 30000;public static void main(String[] args) {HelloAsynClientDemo client = new HelloAsynClientDemo();client.startClient("Michael");}/** * * @param userName */public void startClient(String userName) {try {TAsyncClientManager clientManager = new TAsyncClientManager();TNonblockingTransport transport = new TNonblockingSocket(SERVER_IP,SERVER_PORT, TIMEOUT);TProtocolFactory tprotocol = new TCompactProtocol.Factory();HelloWorldService.AsyncClient asyncClient = new HelloWorldService.AsyncClient(tprotocol, clientManager, transport);System.out.println("Client start .....");CountDownLatch latch = new CountDownLatch(1);AsynCallback callBack = new AsynCallback(latch);System.out.println("call method sayHello start ...");asyncClient.sayHello(userName, callBack);System.out.println("call method sayHello .... end");boolean wait = latch.await(30, TimeUnit.SECONDS);System.out.println("latch.await =:" + wait);} catch (Exception e) {e.printStackTrace();}System.out.println("startClient end.");}public class AsynCallback implements AsyncMethodCallback<sayHello_call>{private CountDownLatch latch;public AsynCallback(CountDownLatch latch) {this.latch = latch;}@Overridepublic void onComplete(sayHello_call response) {System.out.println("onComplete");try {// Thread.sleep(1000L * 1);System.out.println("AsynCall result =:"+ response.getResult().toString());} catch (TException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {latch.countDown();}}@Overridepublic void onError(Exception exception) {System.out.println("onError :" + exception.getMessage());latch.countDown();}}}
总体感觉, 这种形式的数据传输更加的简单和方便。
0 0
- thrift简单使用
- thrift简单使用
- Apache Thrift的简单使用
- Apache Thrift的简单使用
- Apache Thrift的简单使用
- Apache Thrift的简单使用
- Apache Thrift的简单使用
- Apache Thrift的简单使用
- Apache Thrift的简单使用
- Apache Thrift的简单使用
- VS2008 thrift简单使用示例
- Apache Thrift的简单使用
- Thrift的安装和简单使用
- Thrift的安装和简单使用
- thrift 简单安装以及rpc使用心得
- Apache Thrift 在 Ubuntu 的简单使用
- 使用Apache Thrift搭建简单服务器
- thrift使用
- json字符串和对象转换以及json2.js和jquery.json-2.3.js中对于json的方法定义理解
- 回归首语
- 【我所認知的BIOS】—>PCI SCAN
- 关于http的post和get
- 统计一个字符串中每个字符出现的次数
- thrift简单使用
- a33-V2.0移植
- http wep page html5
- MongoDB高级查询用法大全
- JavaSE 基础知识
- 订制液晶屏需提供的参数
- mybatis-中级篇-UserMapper.java
- Nova API服务之 创建虚拟机流程(3)
- 10.java设计模式(读书笔记)建造者模式