Eclipse 部署Thrift 实例 & 服务模型实例演示(java)

一:Eclipse 部署Thrift 实例 

 注:需要1:工具包thrift-0.9.0.ext (下载地址http://download.csdn.net/detail/xyw_eliot/5414527)   2: Java语言Thrift工程需要的jar包+libthrift-0.9.0.jar(下载地址http://download.csdn.net/detail/xyw_eliot/5414271或参考Thrift入门配置2通过ANT获取)


   1.1 自动生成初始类*.java代码

   1.1.1 定义*.thrift文件(以Hello.thrift文件为例)

           @下载的thrift-0.9.0.exe放置在目录D:\Thrift下;

           @编写Hello.thrift文件:

              service Hello{
                    string helloString(1:string para)
                    i32 helloInt(1:i32 para)
                    bool helloBoolean(1:bool para)
                    void helloVoid()
                    string helloNull()
           }

          使用IDL描述性语言编写的Thrift文件,包括了5个方法,每个方法包含一个方法名,参数列表和返回类型。每个参数包括参数序号,参数类型以及参数名。 Thrift 是对 IDL(Interface Definition Language) 描述性语言的一种具体实现;


  1.1.2 生成初始类Hello.java代码

         将Hello.thrift文件和thrift-0.9.0.exe放置到相同目录下,即D:\Thrift,运行cmd,打开窗口命令行(D: 回车  ; cd D:\Thrift )定位到D:\Thrift ,执行命令:D:\Thrift>thrift-0.9.0.exe -gen java Hello.thrift

完成后在D:\Thrift下会生成一个目录gen-java,里面有Hello.java

  

  1.2  创建Java工程

          打开Eclipse或者Myeclipse,创建一个Java工程:Hello,导入刚才生成的Hello.java文件,同时新建一个自由文件夹,Thrift工程需要的jar包以及libthrift-0.9.0.jar放置到文件夹下,同时在Java Build Path中添加引用。


1.3 编写HelloServiceImpl 接口,接口实现Thrift定义文件中的服务。

    import org.apache.thrift.TException;
public class HelloServiceImpl implements Hello.Iface{
    public boolean helloBoolean(boolean para) throws TException{
        return para;
    }
    public int helloInt(int para) throws TException{
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return para;
    }
    
    public String helloNull() throws TException{
        return null;
    }
    
    public String helloString(String para) throws TException{
        return para;
    }
    
    public void helloVoid() throws TException{
        System.out.println("Hello World!");
    }

}


1.4 编写服务器端

import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;

public class HelloServiceServer {
    /**
     * 启动thrift服务器
     * @param args
     */
    public static void main(String[] args) {        
        try{
        //设置服务器端口为7911
        TServerSocket serverTransport = new TServerSocket(7911);
        //设置协议工厂为TBinaryProtocol.Factory
        Factory proFactory = new TBinaryProtocol.Factory();
        //关联处理器与Hello服务的实现
        TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl());
        TServer.Args tArgs = new TServer.Args(serverTransport);
        tArgs.processor(processor);
        tArgs.protocolFactory(proFactory);
        //使用TSimpleServer
        TServer server = new TSimpleServer(tArgs);
        System.out.println("Start server on port 7911....");
        server.serve();
        }catch(TTransportException e){
            e.printStackTrace();
        }       
    }

}

1.5 编写客户端

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;

public class HelloServiceClient {
    /**
     * 调用Hello服务
     * @param args
     */
    public static void main(String[] args) {                
        try {
            //设置调用的服务器为本地,端口为7911
            TTransport transport = new TSocket("localhost", 7911);
            transport.open();
            //设置传输协议为TBinaryProtocol
            TProtocol protocol = new TBinaryProtocol(transport);
            Hello.Client client = new Hello.Client(protocol);
            client.helloVoid();
            transport.close();
            
        } catch (TTransportException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

1.6  运行和结果

     先运行服务器端,再运行客户端;

    结果:Start server on port 7911....                      Hello World!


二 : 服务模型实例演示(java)

      注:Hello.java  /  HelloServiceImpl.java 见上生成的代码;

      2.1 TSimpleServer服务端:单线程服务器端使用标准的阻塞式 I/O,简单的单线程服务模型

      2.2 TThreadPoolServer 服务模型:线程池服务模型(多线程服务器端使用标准的阻塞式I/O),使用标准的阻塞式IO,预先创建一组线程处理请求

     2.3  TNonblockingServer 服务模型/多线程服务器端使用非阻塞式 I/O :使用非阻塞式IO,服务端和客户端需要指定 TFramedTransport 数据传输的方式。

     2.4  THsHaServer 服务模型:半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。

     2.5  AsynClient 异步客户端

     源代码可以去我的资源里去下载 ”thrift + 服务模型实例演示(java)

              

你可能感兴趣的:(java,eclipse,thrift,实例,部署Thrift)