An introduction to Apache Thrift
-
Upload
semtech-solutions-ltd -
Category
Technology
-
view
2.355 -
download
1
Transcript of An introduction to Apache Thrift
Apache Thrift
What is it ?
Languages
Process
Architecture
Example
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
Apache Thrift Languages
Languages supported
C++Cocoa
JavaJavaScript
PythonNode.js
PHPSmalltalk
RubyOCaml
ErlangDelphi
Perl..... and others
Haskell
C#
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
To generate our source code
Now we add our extra client / server functionality
Apache Thrift Service
Apache Thrift Where used ?
So who is using Thrift ?
Cassandra
Scribe
Hadoop Hbase
ThriftDB
Others .........
Apache Thrift
Architecture
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
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;
}
}
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();
}
}
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();
}
}
Contact Us
Feel free to contact us at
www.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