An introduction to Apache Thrift

download An introduction to Apache Thrift

If you can't read please download the document

Transcript of An introduction to Apache Thrift

Apache Thrift

What is it ?

Languages

Process

Architecture

Example

[email protected]

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

[email protected]

Apache Thrift Languages

Languages supported

C++Cocoa

JavaJavaScript

PythonNode.js

PHPSmalltalk

RubyOCaml

ErlangDelphi

Perl..... and others

Haskell

C#

[email protected]

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

[email protected]

Apache Thrift Service

[email protected]

Apache Thrift Where used ?

So who is using Thrift ?

Cassandra

Scribe

Hadoop Hbase

ThriftDB

Others .........

[email protected]

Apache Thrift

Architecture

[email protected]

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

[email protected]

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;

}

}

[email protected]

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();

}

}

[email protected]

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();

}

}

[email protected]

Contact Us

Feel free to contact us at

www.semtech-solutions.co.nz

[email protected]

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