An introduction to Apache Thrift

Views:
 
     
 

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 ?

Comments

Presentation Transcript

Apache Thrift:

Apache Thrift What is it ? Languages Process Architecture Example www.semtech-solutions.co.nz info@semtech-solutions.co.nz

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 www.semtech-solutions.co.nz info@semtech-solutions.co.nz

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# www.semtech-solutions.co.nz info@semtech-solutions.co.nz

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 www.semtech-solutions.co.nz info@semtech-solutions.co.nz

Apache Thrift – Service:

Apache Thrift – Service www.semtech-solutions.co.nz info@semtech-solutions.co.nz

Apache Thrift – Where used ?:

Apache Thrift – Where used ? So who is using Thrift ? Cassandra Scribe Hadoop – Hbase ThriftDB Others ......... www.semtech-solutions.co.nz info@semtech-solutions.co.nz

Apache Thrift Architecture:

Apache Thrift Architecture www.semtech-solutions.co.nz info@semtech-solutions.co.nz

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 www.semtech-solutions.co.nz info@semtech-solutions.co.nz

Apache Thrift – Example:

Apache Thrift – Example Create interface in TimeServerImpl.java 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; } } www.semtech-solutions.co.nz info@semtech-solutions.co.nz

Apache Thrift – Example – Java Server:

Apache Thrift – Example – Java Server package server; import java.io.IOException; 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(); } } www.semtech-solutions.co.nz info@semtech-solutions.co.nz

Apache Thrift – Example – Java Client:

Apache Thrift – Example – Java Client package client; import java.net.SocketException; 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); transport.open(); 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(); } } www.semtech-solutions.co.nz info@semtech-solutions.co.nz

Contact Us:

Contact Us Feel free to contact us at www.semtech-solutions.co.nz info@semtech-solutions.co.nz 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