`
punishzhou
  • 浏览: 142938 次
社区版块
存档分类
最新评论

Thrift的使用

 
阅读更多

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

    【标题】: "通过Thrift使用C++访问HBase" 【描述】: "本文档详述了如何在Linux和Windows环境下配置Thrift环境并使用HBase的C++客户端。" 【标签】: "hadoop hbase thrift boost" 在IT领域,特别是大数据处理中,...

    Thrift 使用

    1. IDL(Interface Definition Language):Thrift使用类似C++的语法来定义服务接口和数据结构,这被称为IDL文件。例如,你可以定义一个服务和它的方法,以及结构体(struct)来传递数据。 2. 生成代码:将IDL文件...

    Apache Thrift 使用说明

    对于 Java 示例,首先同样使用 `thrift` 生成 Java 代码,然后进入 `gen-java` 文件夹,如果尚未安装 ant,可以使用 `sudo apt-get install ant` 来安装。使用 ant 来编译 Java 代码,并运行生成的可执行文件,同样...

    Thrift使用示例代码

    在本示例中,我们将深入探讨Thrift的使用,通过具体的代码示例来帮助理解其工作原理。 首先,Thrift的使用流程通常包括以下几个步骤: 1. **定义服务接口**:在Thrift IDL(Interface Description Language)文件...

    thrift实现http协议案例

    通过运行这个测试工程,你可以了解如何将Thrift服务部署到支持HTTP的服务器上,如Tomcat或Jetty,以及如何使用HTTP客户端(如curl或浏览器)与之交互。 总结一下,Thrift实现HTTP协议的关键在于创建一个自定义...

    thrift的使用介绍

    一旦有了IDL文件,你可以使用Thrift编译器生成对应语言的客户端和服务器端代码。例如,对于PHP和Python,这将生成服务接口类、协议处理类以及数据结构的序列化和反序列化代码。 - `PhpClient.php`: 这是生成的PHP...

    使用thrift、websocket在javascript和cpp之间建立rpc调用

    使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。

    Thrift-java学习小结

    Thrift使用一种高效的二进制协议进行通信,它支持多种传输方式,如TCP、HTTP等。这种协议设计考虑了网络通信的性能,包括数据序列化和反序列化,使得跨语言通信变得更加高效。 七、异常处理 Thrift支持自定义异常,...

    thrift-编译工具

    1. **IDL(接口定义语言)**:Thrift使用类似C++的语法定义服务接口和数据结构,这些定义存储在.thrift文件中。例如: ```thrift service MyService { string sayHello(1:string name) } ``` 2. **编译器**:Thrift...

    thrift环境搭建(内附thrift运行环境可执行程序、搭建说明文本)

    Thrift使用二进制协议,既高效又紧凑,同时支持HTTP、TCP和多种其他传输层协议,使其能够在各种环境中灵活部署。 10. **应用场景** Thrift广泛应用于分布式系统中的数据交换,例如数据库访问、消息队列、RPC...

    thrift开源项目研究

    1. IDL(Interface Definition Language):Thrift使用IDL文件定义服务接口和数据类型,类似于protobuf的.proto文件。 2. 编译器:Thrift编译器将IDL文件转换为各种目标语言(如Java、Python、C++等)的代码,包括...

    thrift0.9.3附带jar包

    这个压缩包“thrift0.9.3附带jar包”包含了Thrift 0.9.3版本的相关库文件,对于Java开发者来说,这些jar包是使用Thrift在Java平台上开发RPC(远程过程调用)服务所必需的。 Thrift 的核心概念包括: 1. **IDL...

    thrift入门教程+代码

    1. 接口定义语言(IDL):Thrift使用IDL文件来定义服务接口,这些文件通常以`.thrift`为扩展名。在IDL文件中,你可以定义数据类型(如结构体、枚举、异常)、服务以及它们的操作。例如: ```thrift service ...

    采用java操作thrift代码示例

    以上是基本的Thrift使用步骤。在实际项目中,可能需要处理更复杂的场景,如异常处理、连接池管理、多线程等。Thrift还提供了多种传输方式(如HTTP、HTTPS、NIO等)和协议(如Binary、Compact等),可以根据具体需求...

    thrift javascript example

    1. **IDL(Interface Definition Language)**: Thrift使用一种类似C++的语法来定义服务接口和数据结构。这些定义文件通常以`.thrift`为扩展名,它们描述了服务的方法、数据类型以及它们之间的交互方式。 2. **...

    thrift详解

    用户通过定义 .thrift 文件来指定数据类型和服务接口,然后使用 Thrift 编译器生成特定语言的客户端和服务端代码。例如,可以使用以下命令来生成 Java 代码: ``` thrift-0.9.3.exe -r -gen java TestThrift.thrift...

    thrift中文简易教程

    - **高性能**:Thrift 使用高效的二进制格式进行数据交换,相比于文本格式如 XML 或 JSON,具有更高的性能。 - **易于扩展**:Thrift 的设计使得服务易于扩展,可以通过修改 IDL 文件来添加新的功能,而无需对现有的...

    thrift运行成功的例子

    5. **通信协议与序列化**:Thrift 使用自己的二进制协议进行数据传输,这种协议高效且紧凑,适合跨语言通信。同时,Thrift 还提供了数据序列化和反序列化的功能,确保不同语言之间的数据交换是透明的。 6. **安全与...

    thrift-0.11.0

    4. 协议:Thrift使用自己的二进制协议进行数据传输,该协议高效且紧凑,适合大规模数据交换。同时,它还支持HTTP和HTTPS等标准协议,以便于集成到现有的网络环境中。 5. 传输层:Thrift支持多种传输方式,如TCP、...

    Thrift简单调用demo代码

    6. **网络通信**:Thrift使用二进制协议进行高效的数据传输,支持HTTP、TCP等多种传输层协议。在本示例中,很可能是TCP。 7. **异常处理**:Thrift定义了自己的异常体系,可以在IDL中声明可能抛出的异常。当服务端...

Global site tag (gtag.js) - Google Analytics