An introduction to Apache Thrift


Presentation Description

A short introduction to Apache Thrift, what is it and how does it work ? How can it help to define multi language client/server interfaces ?


Presentation Transcript

Apache Thrift:

Apache Thrift What is it ? Languages Process Architecture Example

Apache Thrift – What is it ?:

Apache Thrift – What is it ? A multi language software framework For client / services development It is scalable Uses a compiler to generate source code Released with Apache 2 License Uses an IDL ( interface descripton language )‏ Originally developed at Facebook

Apache Thrift – Languages:

Apache Thrift – Languages Languages supported C++ Cocoa Java JavaScript Python Node.js PHP Smalltalk Ruby OCaml Erlang Delphi Perl ..... and others Haskell C#

Apache Thrift – Process:

Apache Thrift – Process So how do we start to create a Thrift based app ? We define a Thrift file Which includes our interface definition Defines our Thrift types Defines our services Our clients will be able to call our services We now use the Thrift compiler thrift --gen <language> <Thrift file> To generate our source code Now we add our extra client / server functionality

Apache Thrift – Service:

Apache Thrift – Service

Apache Thrift – Where used ?:

Apache Thrift – Where used ? So who is using Thrift ? Cassandra Scribe Hadoop – Hbase ThriftDB Others .........

Apache Thrift Architecture:

Apache Thrift Architecture

Apache Thrift – Example (Java)‏:

Apache Thrift – Example (Java)‏ Create Thrift interface file # time.thrift namespace java tserver.gen typedef i64 Timestamp service TimeServer { Timestamp time()‏ } Compile to Java code thrift --gen java time.thrift

Apache Thrift – Example:

Apache Thrift – Example Create interface in package server; import org.apache.thrift.TException; import tserver.gen.*; class TimeServerImpl implements TimeServer.Iface { @Override public long time() throws TException { long time = System.currentTimeMillis(); System.out.println("time() called: " + time); return time; } }

Apache Thrift – Example – Java Server:

Apache Thrift – Example – Java Server package server; import; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TBinaryProtocol.Factory; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TThreadPoolServer; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TTransportException; import tserver.gen.TimeServer; public class Server { private void start(){ try { TServerSocket serverTransport = new TServerSocket(7911); TimeServer.Processor processor = new TimeServer.Processor(new TimeServerImpl()); Factory protFactory = new TBinaryProtocol.Factory(true, true); TServer server = new TThreadPoolServer(processor, serverTransport, protFactory); System.out.println("Starting server on port 7911 ..."); server.serve(); } catch (TTransportException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String args[]){ Server srv = new Server(); srv.start(); } }

Apache Thrift – Example – Java Client:

Apache Thrift – Example – Java Client package client; import; 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; import tserver.gen.TimeServer.Client; public class TimeClient { private void start(){ TTransport transport; try { transport = new TSocket("localhost", 7911); TProtocol protocol = new TBinaryProtocol(transport);Client client = new Client(protocol);; long time = client.time(); System.out.println("Time from server:" + time); transport.close(); } catch (SocketException e) { e.printStackTrace(); } catch (TTransportException e) { e.printStackTrace();} catch (TException e) { e.printStackTrace(); } } public static void main(String[] args) { TimeClient c = new TimeClient(); c.start(); } }

Contact Us:

Contact Us Feel free to contact us at We offer IT project consultancy We are happy to hear about your problems You can just pay for those hours that you need To solve your problems

authorStream Live Help