thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
1. Overview
Thrift was originally developed by Facebook, open source in April 07 and entered the Apache incubator in May 08. Thrift allows you to define a simple definition of the data type in the file and the service interface. As an input file, the compiler generates code to easily build a seamless cross-programming language for RPC client and server communication.
Website address: thrift.apache.org
Recommended Articles worth reading:
http://thrift.apache.org/
Http://thrift.apache.org/download
Http://jnb.ociweb.com/jnb/jnbJun2009.html
Http://wiki.apache.org/thrift
2. Maven Dependency
If it is a MAVEN build project, add the following directly to the Pom.xml:
<dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.9.2</version></dependency>
3. Basic Concepts
3.1. Data type
Basic type:
BOOL: Boolean, True or False, Boolean corresponding to Java
A byte:8-bit signed integer that corresponds to the byte of Java
I16:16-bit signed integer that corresponds to the short of Java
I32:32-bit signed integer that corresponds to the int of Java
i64:64-bit signed integer that corresponds to a long in Java
double:64 bit floating point number, corresponding to the double of Java
STRING:UTF-8 encoded string that corresponds to Java string
struct type:
struct: Defines a common object, similar to a struct definition in C, which is a JavaBean in Java
Container type:
List: ArrayList for Java
Set: corresponding to Java HashSet
Map: HashMap for Java
Exception type:
Exception: Exception for Java
Service Type:
Service: The class of the corresponding services
3.2. Server-side Coding basic steps:
Implement the service Processing interface Impl
Create Tprocessor
Create Tservertransport
Create Tprotocol
Create Tserver
Start the server
3. Basic client code steps:
Create transport
Create Tprotocol
Create a Client based on Ttransport and Tprotocol
The corresponding method of calling the client
4. Data Transfer Protocol
Tbinaryprotocol: binary format.
Tcompactprotocol: Compression format
Tjsonprotocol:json format
Tsimplejsonprotocol: Provides JSON write-only protocol, resulting files are easily parsed by scripting language
Tips: The client and server protocols are consistent
4. Example Demonstration
Before you have to install thrift, you can install on Windows, you can install on Linux, as long as you can execute the thrift command to produce the service-side interface on the line.
4.1. Add a file Add.thrift, which contains the following content:
If you have used Google Protocol buffer, you will not be unfamiliar with the following operations.
namespace java com.jamesfen.thrift // java的包名 typedefint //typedefs to get convenient names for your types service AdditionService { // defines the service to add two numbers int add(1:int2:int//defines a method }
4.2. Generate the service-side interface code and execute the following command
add.thrift
4.3. Implementing the interface
When you are done with the second step, the current directory will produce a Gen-java folder containing a Additionservice.java file to copy the class into your package. There is an internal interface to implement, and now you want to implement that interface.
package com.jamesfen.thrift;import org.apache.thrift.TException;publicclass AdditionServiceHandler implements AdditionService.Iface{ @Override publicintadd(intintthrows TException { return n1 + n2; }}
4.4. Service-side code, open a listening interface for the Additionservicehandler class (9090)
Packagecom. Jamesfen. Thrift;import org. Apache. Thrift. Transport. Tserversocket;import org. Apache. Thrift. Transport. Tservertransport;import org. Apache. Thrift. Server. Tserver;import org. Apache. Thrift. Server. Tserver. Args;import org. Apache. Thrift. Server. Tsimpleserver;public class MyServer {public static void Startsimpleserver (Additionservice. Processor<AdditionServiceHandler> processor) {try {tservertransport servertransport = new Tserversocket (9090);Tserver Server = new Tsimpleserver (new Args (Servertransport). Processor(processor));Use the this for a multithreaded server//Tserver server = new Tthreadpoolserver (New//Tthreadpools Erver. Args(Servertransport). Processor(processor));System. out. println("Starting the simple server ...");Server. Serve();} catch (Exception e) {E. Printstacktrace();}} public static void Main (string[] args) {startsimpleserver (new Additionservice. Processor<AdditionServiceHandler> (New Additionservicehandler ()));}}
5. Client code, requesting service
Packagecom. Jamesfen. Thrift;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 Additionclient {public static void main (string[] args) {try {Ttransport transport;Transport = new Tsocket ("localhost",9090);Transport. Open();Tprotocol protocol = new Tbinaryprotocol (transport);Additionservice. ClientClient = new Additionservice. Client(protocol);System. out. println(Client. Add( -, $));Transport. Close();} catch (Ttransportexception e) {E. Printstacktrace();} catch (Texceptionx) {x. Printstacktrace();} }}
4.6. Running results
Service side:
Starting the simple server ...
Client:
300
4.7:demo Source
Https://github.com/Bellonor/myhadoop2.x/tree/master/myhadoop2.x/src/main/java/com/jamesfen/thrift
Apache Thrift with Java Quickstart (Thrift introduction and Java instance)