java操作Thrift
thrift的原理及使用介绍可参考http://dongxicheng.org/search-engine/thrift-framework-intro/
1:下载thrift并解压
下载地址:http://thrift.apache.org/download/
2:编写Thrift文件(定义接口,结构,异常等),保存为demoHelllo.thrift
namespace java com.micmiu.thrift.demo HelloWorldService1 { string sayHello(1:String username) }
3.生成接口代码
把thrift-0.9.0.exe和test.thrift文件放在同一个目录,当然也可以把thrift-0.6.1.exe文件放进环境变量
进入DOS命令执行:thrift-0.9.0.exe -r -gen java ./demoHello.thrift
生成文件 gen-java/com/ micmiu /thrift/demo/demoHello.java
4.编写服务端接口实现类
在POM.xml文件加入以下依赖:
<dependency> <groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version> 0.9 . 0 </version>
</dependency>
|
把生成的demoHello.java复制到项目下,并编写实现类HelloWorldImpl如下:
package com.micmiu.thrift.demo;
import org.apache.thrift.TException;
/**
* blog http://www.micmiu.com
*
* @author Michael
*
*/
public class HelloWorldImpl implements HelloWorldService.Iface {
public HelloWorldImpl() {
}
public String sayHello(String username) throws TException {
return "Hi," + username + " welcome to my blog www.micmiu.com";
}
}
5.编写启动服务代码
package com.micmiu.thrift.demo;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TJSONProtocol;
import org.apache.thrift.protocol.TSimpleJSONProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
public class HelloServerDemo {
public static final int SERVER_PORT = 8090;
public void startServer() {
try {
System.out.println("HelloWorld TSimpleServer start ....");
TProcessor tprocessor = new HelloWorldService.Processor<HelloWorldService.Iface>(
new HelloWorldImpl());
// HelloWorldService.Processor<HelloWorldService.Iface> tprocessor =
// new HelloWorldService.Processor<HelloWorldService.Iface>(
// new HelloWorldImpl());
// 简单的单线程服务模型,一般用于测试
TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
TServer.Args tArgs = new TServer.Args(serverTransport);
tArgs.processor(tprocessor);
tArgs.protocolFactory(new TBinaryProtocol.Factory());
// tArgs.protocolFactory(new TCompactProtocol.Factory());
// tArgs.protocolFactory(new TJSONProtocol.Factory());
TServer server = new TSimpleServer(tArgs);
server.serve();
} catch (Exception e) {
System.out.println("Server start error!!!");
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
HelloServerDemo server = new HelloServerDemo();
server.startServer();
}
}
6.编写客户端代码
package com.micmiu.thrift.demo;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TJSONProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
/**
* blog http://www.micmiu.com
*
* @author Michael
*
*/
public class HelloClientDemo {
public static final String SERVER_IP = "localhost";
public static final int SERVER_PORT = 8090;
public static final int TIMEOUT = 30000;
/**
*
* @param userName
*/
public void startClient(String userName) {
TTransport transport = null;
try {
transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
// 协议要和服务端一致
TProtocol protocol = new TBinaryProtocol(transport);
// TProtocol protocol = new TCompactProtocol(transport);
// TProtocol protocol = new TJSONProtocol(transport);
HelloWorldService.Client client = new HelloWorldService.Client(
protocol);
transport.open();
String result = client.sayHello(userName);
System.out.println("Thrify client result =: " + result);
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
} finally {
if (null != transport) {
transport.close();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
HelloClientDemo client = new HelloClientDemo();
client.startClient("Michael");
}
}
7.启动
首先启动HelloServerDemo
显示:
HelloWorld TSimpleServer start ....
然后启动HelloClientDemo
HelloServerDemo console显示
Thrify client result =: Hi,Michael welcome to my blog www.micmiu.com
参考blog:http://www.cnblogs.com/johnc/archive/2011/06/19/2084508.html
相关推荐
【标题】: "通过Thrift使用C++访问HBase" 【描述】: "本文档详述了如何在Linux和Windows环境下配置Thrift环境并使用HBase的C++客户端。" 【标签】: "hadoop hbase thrift boost" 在IT领域,特别是大数据处理中,...
1. IDL(Interface Definition Language):Thrift使用类似C++的语法来定义服务接口和数据结构,这被称为IDL文件。例如,你可以定义一个服务和它的方法,以及结构体(struct)来传递数据。 2. 生成代码:将IDL文件...
对于 Java 示例,首先同样使用 `thrift` 生成 Java 代码,然后进入 `gen-java` 文件夹,如果尚未安装 ant,可以使用 `sudo apt-get install ant` 来安装。使用 ant 来编译 Java 代码,并运行生成的可执行文件,同样...
在本示例中,我们将深入探讨Thrift的使用,通过具体的代码示例来帮助理解其工作原理。 首先,Thrift的使用流程通常包括以下几个步骤: 1. **定义服务接口**:在Thrift IDL(Interface Description Language)文件...
通过运行这个测试工程,你可以了解如何将Thrift服务部署到支持HTTP的服务器上,如Tomcat或Jetty,以及如何使用HTTP客户端(如curl或浏览器)与之交互。 总结一下,Thrift实现HTTP协议的关键在于创建一个自定义...
一旦有了IDL文件,你可以使用Thrift编译器生成对应语言的客户端和服务器端代码。例如,对于PHP和Python,这将生成服务接口类、协议处理类以及数据结构的序列化和反序列化代码。 - `PhpClient.php`: 这是生成的PHP...
使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。
Thrift使用一种高效的二进制协议进行通信,它支持多种传输方式,如TCP、HTTP等。这种协议设计考虑了网络通信的性能,包括数据序列化和反序列化,使得跨语言通信变得更加高效。 七、异常处理 Thrift支持自定义异常,...
1. **IDL(接口定义语言)**:Thrift使用类似C++的语法定义服务接口和数据结构,这些定义存储在.thrift文件中。例如: ```thrift service MyService { string sayHello(1:string name) } ``` 2. **编译器**:Thrift...
1. IDL(Interface Definition Language):Thrift使用IDL文件定义服务接口和数据类型,类似于protobuf的.proto文件。 2. 编译器:Thrift编译器将IDL文件转换为各种目标语言(如Java、Python、C++等)的代码,包括...
Thrift使用二进制协议,既高效又紧凑,同时支持HTTP、TCP和多种其他传输层协议,使其能够在各种环境中灵活部署。 10. **应用场景** Thrift广泛应用于分布式系统中的数据交换,例如数据库访问、消息队列、RPC...
这个压缩包“thrift0.9.3附带jar包”包含了Thrift 0.9.3版本的相关库文件,对于Java开发者来说,这些jar包是使用Thrift在Java平台上开发RPC(远程过程调用)服务所必需的。 Thrift 的核心概念包括: 1. **IDL...
1. 接口定义语言(IDL):Thrift使用IDL文件来定义服务接口,这些文件通常以`.thrift`为扩展名。在IDL文件中,你可以定义数据类型(如结构体、枚举、异常)、服务以及它们的操作。例如: ```thrift service ...
以上是基本的Thrift使用步骤。在实际项目中,可能需要处理更复杂的场景,如异常处理、连接池管理、多线程等。Thrift还提供了多种传输方式(如HTTP、HTTPS、NIO等)和协议(如Binary、Compact等),可以根据具体需求...
1. **IDL(Interface Definition Language)**: Thrift使用一种类似C++的语法来定义服务接口和数据结构。这些定义文件通常以`.thrift`为扩展名,它们描述了服务的方法、数据类型以及它们之间的交互方式。 2. **...
用户通过定义 .thrift 文件来指定数据类型和服务接口,然后使用 Thrift 编译器生成特定语言的客户端和服务端代码。例如,可以使用以下命令来生成 Java 代码: ``` thrift-0.9.3.exe -r -gen java TestThrift.thrift...
- **高性能**:Thrift 使用高效的二进制格式进行数据交换,相比于文本格式如 XML 或 JSON,具有更高的性能。 - **易于扩展**:Thrift 的设计使得服务易于扩展,可以通过修改 IDL 文件来添加新的功能,而无需对现有的...
5. **通信协议与序列化**:Thrift 使用自己的二进制协议进行数据传输,这种协议高效且紧凑,适合跨语言通信。同时,Thrift 还提供了数据序列化和反序列化的功能,确保不同语言之间的数据交换是透明的。 6. **安全与...
4. 协议:Thrift使用自己的二进制协议进行数据传输,该协议高效且紧凑,适合大规模数据交换。同时,它还支持HTTP和HTTPS等标准协议,以便于集成到现有的网络环境中。 5. 传输层:Thrift支持多种传输方式,如TCP、...
6. **网络通信**:Thrift使用二进制协议进行高效的数据传输,支持HTTP、TCP等多种传输层协议。在本示例中,很可能是TCP。 7. **异常处理**:Thrift定义了自己的异常体系,可以在IDL中声明可能抛出的异常。当服务端...