使用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是一款功能强大的跨平台RPC框架,它解决了分布式系统中常见的通信问题。通过IDL文件,开发者可以轻松定义服务接口,并在多种编程语言之间实现通信。无论是对于初学者还是有经验的开发者来说,Thrift都是一款...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并发布,后来成为Apache软件基金会的顶级项目。它旨在提供一个高效、轻量级的机制,允许编程语言之间进行定义和构建可扩展的服务。Thrift通过一个接口...
Thrift 是一个开源的接口定义语言和跨语言的通信框架,最初由 Facebook 开发,目的是解决大规模跨语言服务开发的问题。Thrift 允许开发者定义服务接口,然后生成不同编程语言的代码,使得在各种语言之间能够高效地...
1. **接口定义语言(IDL)**:Thrift使用类似于C++或Java的语法来定义服务接口、数据结构(structs)和枚举类型(enums)。例如: ```idl service Calculator { i32 add(1:i32 num1, 2:i32 num2) } ``` 这定义...
- 可能采用了RPC(远程过程调用)框架,如gRPC或Apache Thrift,来实现客户端和服务器之间的通信。 3. **后端架构**: - 可能使用了RESTful API设计,以HTTP协议进行通信,提供简洁、标准化的接口。 - 可能有...
- **与Thrift/RPC比较**:protobuf更侧重于数据序列化,而Thrift/RPC是完整的RPC框架,包括服务端接口定义和服务调用。 ### 6. protobuf的使用场景 - **网络通信**:作为数据交换格式,如RPC协议。 - **数据存储**...
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎, Thrift是一个驱动层接口,它提供了用于客户端使用多种语言实现的API。 Thrift是个代码生成库,支持的...
这个压缩包提供了一个快速入门的途径,帮助你理解和实践如何在Java项目中使用scribe进行日志管理。确保你正确地安装了所有必要的jar包,并根据示例代码和配置文件进行适当的调整,以适应你的特定需求。
- **架构**: Dubbo是阿里巴巴开源的一个高性能Java RPC框架,它提供了丰富的功能,包括但不限于服务注册与发现、负载均衡、容错、集群容错等。这些功能支持了分布式环境下的高效服务通信和管理。 #### 2. 入门使用 ...
Dubbo是一款高性能的Java RPC框架,由阿里巴巴开源,用于构建分布式应用。它提供了多种配置方式,包括XML配置、属性配置、API配置和注解配置。用户可以在多种不同的场景下应用Dubbo,并可以使用其丰富的功能特性。...
可以先从RMI、Hessian、Thrift等RPC框架入手,了解它们的工作原理及其与Dubbo之间的联系。 5. **Java其他内容**:除了以上提及的知识点外,还需要对Java中的序列化、SPI、代理、ClassLoader、ScriptEngine等内容有...
Dubbo 是一个高性能、轻量级的 Java RPC 框架,用于实现服务的注册与发现、负载均衡、容错、服务治理等功能。它由阿里巴巴开源并贡献给 Apache 基金会,已成为 Apache 的顶级项目。 ### 架构 Dubbo 架构主要由以下...