`

Thrift-使用Java快速入门RPC框架

 
阅读更多
使用Java快速入门RPC框架 - Thrift
Apache Thrift是一个facebook简历的RPC框架,现在是一个Apache的顶级项目。Thrift允许通过一个跨语言的定义文件的方式定义数据类型和服务接口,这个文件作为RPC客户端和服务器通信的标准,你也可以去看看Thrift的白皮书了解更多信息。
根据Apache Thrift的官方站点的描述,Thrift是一个:
software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.

安装Thrift比较的烦,但是在Windows下官方编译了一个thrift.exe,下载安装就行了。
写 Thrift定义文件(.thrift file)
如果你之前有接触过这个东西的话,写定义文件非常的简单。但这里可以参考官方的教程快速开始。
示例定义文件(add.thrift)
查看源码

打印
namespace java com.eviac.blog.samples.thrift.server  // defines the namespace   
   
typedef i32 int  //typedefs to get convenient names for your types  
   
service AdditionService {  // defines the service to add two numbers  
        int add(1:int n1, 2:int n2), //defines a method  
}
编译Thrift定义文件
下面的命令编译.thrift文件
查看源码

打印
thrift --gen <LANGUAGE> <THRIFT filename="">  </THRIFT></LANGUAGE>
对于我的例子来讲,命令是:
查看源码

打印
thrift --gen java add.thrift
在执行完代码后,在gen-java目录下你会发现构建RPC服务器和客户端有用的源代码。在我的例子中我将创建一个叫做AddtionService.java的java文件。
写一个 service handler
Service handler 类必须实现 AdditionService.Iface接口。
示例Service handler(AdditionServiceHandler.java)
查看源码

打印?
package com.eviac.blog.samples.thrift.server;  
   
import org.apache.thrift.TException;  
   
public class AdditionServiceHandler implements AdditionService.Iface {  
   
@Override 
public int add(int n1, int n2) throws TException {  
  return n1 + n2;  
}  
   
}
写一个简单的服务器
下面的示例代码是一个简单的Thrift服务器。可以看到下面的代码中有一段是注释了的,可以去掉注释来启用多线程服务器。
示例服务器(MyServer.java)
查看源码

打印
package com.eviac.blog.samples.thrift.server;  

import org.apache.thrift.transport.TServerSocket;  
import org.apache.thrift.transport.TServerTransport;  
import org.apache.thrift.server.TServer;  
import org.apache.thrift.server.TServer.Args;  
import org.apache.thrift.server.TSimpleServer;  

public class MyServer {  
  
public static void StartsimpleServer(AdditionService.Processor<ADDITIONSERVICEHANDLER> processor) {  
  try {  
   TServerTransport serverTransport = new TServerSocket(9090);  
   TServer server = new TSimpleServer(  
     new Args(serverTransport).processor(processor));  
   
   // Use this for a multithreaded server  
   // TServer server = new TThreadPoolServer(new  
   // TThreadPoolServer.Args(serverTransport).processor(processor));  
   
   System.out.println("Starting the simple server...");  
   server.serve();  
  } catch (Exception e) {  
   e.printStackTrace();  
  }  
}  
    
public static void main(String[] args) {  
  StartsimpleServer(new AdditionService.Processor<ADDITIONSERVICEHANDLER>(new AdditionServiceHandler()));  
}  
  
}</ADDITIONSERVICEHANDLER></ADDITIONSERVICEHANDLER>
写一个客户端
下面的例子是一个使用Java写的客户端短使用AdditionService的服务。

查看源码打印
package com.eviac.blog.samples.thrift.client;  
   
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 AdditionClient {  
   
public static void main(String[] args) {  
   
  try {  
   TTransport transport;  
   
   transport = new TSocket("localhost", 9090);  
   transport.open();  
   
   TProtocol protocol = new TBinaryProtocol(transport);  
   AdditionService.Client client = new AdditionService.Client(protocol);  
   
   System.out.println(client.add(100, 200));  
   
   transport.close();  
  } catch (TTransportException e) {  
   e.printStackTrace();  
  } catch (TException x) {  
   x.printStackTrace();  
  }  
}  
   
}
运行服务端代码(MyServer.java)将会看到下面的输出。
查看源码

打印
Starting the simple server...
然后运行客户端代码(AdditionClient.java),将会看到如下输出。
查看源码

打印
300
分享到:
评论

相关推荐

    thrift入门学习教程

    Thrift是一款功能强大的跨平台RPC框架,它解决了分布式系统中常见的通信问题。通过IDL文件,开发者可以轻松定义服务接口,并在多种编程语言之间实现通信。无论是对于初学者还是有经验的开发者来说,Thrift都是一款...

    thrift入门教程+代码

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并发布,后来成为Apache软件基金会的顶级项目。它旨在提供一个高效、轻量级的机制,允许编程语言之间进行定义和构建可扩展的服务。Thrift通过一个接口...

    Thrift入门.docx

    Thrift 是一个开源的接口定义语言和跨语言的通信框架,最初由 Facebook 开发,目的是解决大规模跨语言服务开发的问题。Thrift 允许开发者定义服务接口,然后生成不同编程语言的代码,使得在各种语言之间能够高效地...

    thrift基础文档

    1. **接口定义语言(IDL)**:Thrift使用类似于C++或Java的语法来定义服务接口、数据结构(structs)和枚举类型(enums)。例如: ```idl service Calculator { i32 add(1:i32 num1, 2:i32 num2) } ``` 这定义...

    分布式井字游戏(java后端和用于测试的java客户端).zip

    - 可能采用了RPC(远程过程调用)框架,如gRPC或Apache Thrift,来实现客户端和服务器之间的通信。 3. **后端架构**: - 可能使用了RESTful API设计,以HTTP协议进行通信,提供简洁、标准化的接口。 - 可能有...

    protobuf入门.pdf

    - **与Thrift/RPC比较**:protobuf更侧重于数据序列化,而Thrift/RPC是完整的RPC框架,包括服务端接口定义和服务调用。 ### 6. protobuf的使用场景 - **网络通信**:作为数据交换格式,如RPC协议。 - **数据存储**...

    ThriftDemo.rar

    Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎, Thrift是一个驱动层接口,它提供了用于客户端使用多种语言实现的API。 Thrift是个代码生成库,支持的...

    scribe客户端所需jar包

    这个压缩包提供了一个快速入门的途径,帮助你理解和实践如何在Java项目中使用scribe进行日志管理。确保你正确地安装了所有必要的jar包,并根据示例代码和配置文件进行适当的调整,以适应你的特定需求。

    dubbo开发者文档

    - **架构**: Dubbo是阿里巴巴开源的一个高性能Java RPC框架,它提供了丰富的功能,包括但不限于服务注册与发现、负载均衡、容错、集群容错等。这些功能支持了分布式环境下的高效服务通信和管理。 #### 2. 入门使用 ...

    dubbo用户指南

    Dubbo是一款高性能的Java RPC框架,由阿里巴巴开源,用于构建分布式应用。它提供了多种配置方式,包括XML配置、属性配置、API配置和注解配置。用户可以在多种不同的场景下应用Dubbo,并可以使用其丰富的功能特性。...

    dubbo源码解析2

    可以先从RMI、Hessian、Thrift等RPC框架入手,了解它们的工作原理及其与Dubbo之间的联系。 5. **Java其他内容**:除了以上提及的知识点外,还需要对Java中的序列化、SPI、代理、ClassLoader、ScriptEngine等内容有...

    Dubbo Developer Guide.pdf

    Dubbo 是一个高性能、轻量级的 Java RPC 框架,用于实现服务的注册与发现、负载均衡、容错、服务治理等功能。它由阿里巴巴开源并贡献给 Apache 基金会,已成为 Apache 的顶级项目。 ### 架构 Dubbo 架构主要由以下...

Global site tag (gtag.js) - Google Analytics