1. Apache Thrift
●
What is it ?
●
Languages
●
Process
●
Architecture
●
Example
www.semtech-solutions.co.nz
info@semtech-solutions.co.nz
2. Apache Thrift – What is it ?
●
A multi language software framework
●
For client / services development
●
It is scaleable
●
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
3. 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
4. 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
5. Apache Thrift – Service
www.semtech-solutions.co.nz
info@semtech-solutions.co.nz
6. 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
9. 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
10. 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
11. 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
12. 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