`
lvmlvy
  • 浏览: 44734 次
社区版块
存档分类
最新评论

Thrift开发实例

    博客分类:
  • java
阅读更多
Thrift开发实例


准备工作
Thrift主页:http://thrift.apache.org/

Thrift下载:http://thrift.apache.org/download/

下载thrift-0.8.0.tar.gz和Thrift compiler for Windows (thrift-0.8.0.exe)

创建工作区../thrift;

将thrift-0.8.0.tar.gz和thrift-0.8.0.exe拷贝到../thrift下;

将thrift-0.8.0.tar.gz解压到当前目录;

创建start.bat,编辑其内容为:

cd

thrift-0.8.0 --gen java *.thrift

pause




简单实例
创建thrift脚本文件:

namespace java com.test.rpc

service TestService{

string getUserName(1:i64 id)

}


执行start.bat,thrift会根据脚本生成java代码../thrift/gen-java/com/test/rpc/ TestService.java;

创建java project;

创建package:com.test.rpc,将生成的TestService.java拷入;

创建接口实现类TestImpl

package com.test.rpc;



import org.apache.log4j.Logger;

import org.apache.thrift.TException;



import com.test.rpc.TestService.Iface;

import com.test.user.IUserService;

import com.test.user.UserServiceImpl;





public class TestImpl implements Iface {

    private static final Logger LOG = Logger.getLogger(TestImpl.class);

   

    @Override

    public String getUserName(long id) throws TException {

        LOG.info("TestImpl server get rpc msg :"+id);

        IUserService userService = new UserServiceImpl();

        String username = userService.getUser(id);

        return username;

    }



}


创建RPC server启动线程

package com.test.rpc;



import javax.xml.ws.Endpoint;



import org.apache.log4j.Logger;

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.TThreadPoolServer;

import org.apache.thrift.server.TThreadPoolServer.Args;

import org.apache.thrift.transport.TServerSocket;

import org.apache.thrift.transport.TTransportException;



import com.test.service.CommonService;











public class TestServer extends Thread  {

    private static final Logger LOG = Logger.getLogger(TestServer.class);

   

    @Override

    public void run() {

        try {

            TestImpl testimpl = new TestImpl();

            TServerSocket serverTransport = new TServerSocket(7911);

            Factory proFactory = new TBinaryProtocol.Factory();

            TProcessor processor = new TestService.Processor<TestImpl>(testimpl);

            Args rpcArgs = new Args(serverTransport);

            rpcArgs.processor(processor);

            rpcArgs.protocolFactory(proFactory);

            TServer server = new TThreadPoolServer(rpcArgs);

            LOG.info("Start TestService on port 7911..." + Thread.currentThread().getId() + "["

                + Thread.currentThread().getName() + "]");

            server.serve();

        } catch (TTransportException e) {

            e.printStackTrace();

            LOG.info("TestService.simpleRun", e);

        }

    }

    /**

     * @param args

     */

    public static void main(String[] args)   {

        TestServer server = new TestServer();

        server.start();

    }



}








复杂对象实例
与简单实例基本相同,只是脚本不同,参数以对象方式传递,自动生成的java类多一些;

创建thrift脚本文件:

namespace java com.test.rpc

struct User {  

  1: i64 id  

  2: string name  

}

service TestService{

User getUser(1:i64 id)

}


执行start.bat,thrift会根据脚本生成java代码../thrift/gen-java/com/test/rpc/目录下TestService.java、User.Java;

创建java project;

创建package:com.test.rpc,将生成的TestService.java、User.Java拷入;

其他步骤类同上例;



 

客户端代码



package com.test.rpc;



import org.apache.log4j.Logger;

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.TTransportException;

import com.test.rpc.TestService.Client;



public class TestClient {

    private static final Logger LOG = Logger.getLogger(TestClient.class);

   

    public static void main(String[] args){

        try{

            TSocket tsocket = new TSocket("localhost", 7911);

tsocket.open();

            TProtocol protocol = new TBinaryProtocol(tsocket);

            Client client = new Client(protocol);

            User user = client.getUser(id);

            LOG.info(user.getName());

        }catch (Exception e) {

            LOG.error(e.getMessage(), e);

        }

    }

   

}




分享到:
评论

相关推荐

    thrift中间件实例代码

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开发并开源,后来成为Apache基金会的顶级项目。它的主要目的是提供一个高效、轻量级的框架,用于构建可扩展的服务,使得不同编程语言之间能够进行无缝通信...

    thrift-delphi实例

    同时,Thrift还具有良好的扩展性,可以方便地添加新的服务和数据类型,使得Delphi开发的系统能够无缝地与其他语言的系统进行交互。 总之,Thrift Delphi实例是一个极好的学习资源,它揭示了跨语言服务通信的核心...

    thrift样例操作实例

    `tech_thrift.rar`可能是一个包含具体Thrift服务开发实例的压缩包,包含了一些示例代码和项目配置。 `apache-ant-1.9.6-bin.zip`是Apache Ant,一个Java的构建工具,用于自动化构建Thrift项目和执行编译任务。 `...

    qt 实现thrift的一个例子

    在IT行业中,Thrift是一种高性能、可扩展的跨语言服务开发框架,由Facebook开源,用于构建分布式服务。它通过定义一种中间表示(IDL,接口定义语言)来描述服务,然后自动生成不同编程语言的代码,使得不同语言之间...

    C++(Qt)下的thrift的使用示例

    在实际开发中,你可能还需要处理一些额外的细节,比如错误处理、连接管理和性能优化。例如,你可以使用Qt的信号和槽机制来处理服务调用的结果,或者使用QCache来缓存服务对象以提高效率。 总的来说,“C++(Qt)下...

    基于thrift开发的客户端和服务端

    在这个"基于thrift开发的客户端和服务端"的示例中,我们将深入理解如何使用Thrift来构建跨平台的服务通信。 首先,Thrift通过定义一个接口描述语言(IDL)来创建服务接口。这个文件通常以`.thrift`为扩展名,它包含...

    thrift实例以及所需jar包

    Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述服务接口,然后自动生成相应的客户端和服务器端代码,简化了多语言服务开发的复杂性。 Thrift的核心概念是服务接口,它定义了服务提供的...

    基于thrift的RPC调用实例

    在本实例中,我们将关注一个基于Thrift的RPC调用实现,Thrift是由Facebook开发的一种高效的跨语言服务开发框架。 Thrift的核心思想是定义一种中间描述文件(.thrift),该文件包含了服务接口、数据结构以及服务间的...

    thrift,facebook实例

    thrift属于facebook.com技术核心框架之一,使用不同开发语言开发的系统可以通过该框架实现彼此间的通讯,开发者只需编辑一份thrift脚本,即可自动获得其它开发语言的代码(比如 c++ java python ruby c# haskell ...

    thrift实现的实例程序

    Thrift是一种高性能、跨语言的服务框架,由Facebook于2007年开发并开源,它允许程序员在不同的编程语言之间创建可伸缩的、高效的、跨平台的服务。在这个实例程序中,我们将深入探讨Thrift的工作原理,以及如何通过它...

    thrift例子

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并开源,后来成为Apache软件基金会的顶级项目。它通过定义一种中间语言(IDL,Interface Definition Language)来描述服务接口,允许开发者在不同的...

    Thrift和Avro实例

    Thrift是由Facebook开发的一种开源跨语言服务开发框架。它的主要目标是提供一种高效、可扩展的方法来构建分布式应用程序。Thrift通过定义服务接口和数据结构,生成相应的代码,使得开发者可以在多种编程语言之间轻松...

    thrift-Demo

    这个"thrift-Demo"应该是一个演示如何使用Thrift的实例,包含了一系列的步骤和文件,帮助初学者理解Thrift的工作原理和使用方法。 在Thrift中,我们首先需要创建一个`.thrift`文件,这个文件定义了服务的接口和数据...

    Java Thrift demo例子

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开源,现由Apache基金会维护。它允许开发者定义服务接口,然后自动生成多种编程语言的代码,使得不同语言之间可以进行高效、可靠的RPC(远程过程调用)...

    thrift-0.13.0.zip

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年创建,现在是Apache软件基金会的项目。它的主要目标是通过定义一种中间语言(IDL,Interface Definition Language)来简化不同编程语言之间的通信,使得...

    Thrift-java学习小结

    这种跨语言的能力使得开发多语言服务变得简单,同时Thrift还提供了一种轻量级的二进制协议,确保了通信效率。 二、Thrift IDL Thrift接口定义语言(IDL)是一种简单的结构化语言,用于定义服务、数据结构和常量。...

    Thrift实战案例

    通过深入理解和实战应用,我们可以充分利用Thrift解决实际开发中的通信难题,提升系统的整体性能和可维护性。在实际项目中,如ThriftMvnProject所示,将Thrift集成到Maven项目中,能够简化开发流程,方便管理和升级...

    Laravel开发-thrift-laravel

    **Laravel 开发与 Thrift Laravel** 在现代Web开发中,Laravel是一个广泛使用的PHP框架,以其优雅的语法和强大的功能赢得了开发者们的喜爱。而Thrift则是一个跨语言的服务开发框架,由Facebook开源,用于构建可伸缩...

    maven-thrift-server

    在软件开发中,Thrift是一种高效的跨语言服务开发框架,由Facebook开发并开源。它允许定义数据类型和服务接口,然后自动生成各种编程语言的代码,使得不同语言的系统之间可以进行无缝通信。Maven作为Java项目管理...

Global site tag (gtag.js) - Google Analytics