1、Hello.thrift文件内容
namespace java com.seasy.thrift struct Message { 1: i32 type; 2: binary data; } struct Response { 1: i32 code; 2: string message; } service Hello{ string helloString(1:string param) i32 helloInt(1:i32 param) bool helloBoolean(1:bool param) void helloVoid() Response sendMessage(1:Message message) }
2、堵塞式线程池服务模型
server端:
TServerSocket serverTransport = new TServerSocket(Configuration.SERVER_PORT, Configuration.TIMEOUT); TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl()); TThreadPoolServer.Args tArgs = new TThreadPoolServer.Args(serverTransport); tArgs.requestTimeoutUnit(TimeUnit.MILLISECONDS); tArgs.requestTimeout(5000); tArgs.protocolFactory(new TBinaryProtocol.Factory()); tArgs.processor(processor); TServer server = new TThreadPoolServer(tArgs); server.serve();
client端:
TTransport transport = new TSocket(Configuration.HOST, Configuration.SERVER_PORT, Configuration.TIMEOUT); transport.open(); TProtocol protocol = new TBinaryProtocol(transport); Hello.Client client = new Hello.Client(protocol); ByteBuffer data = ByteBuffer.wrap("hello world".getBytes("UTF-8")); client.sendMessage(new Message(1, data));
3、非堵塞式多线程服务模型
server端:
TNonblockingServerSocket serverSocket = new TNonblockingServerSocket(8080); TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl()); TNonblockingServer.Args tArgs = new TNonblockingServer.Args(serverSocket); tArgs.processor(processor); tArgs.transportFactory(new TFramedTransport.Factory()); tArgs.protocolFactory(new TCompactProtocol.Factory()); TServer tserver = new TNonblockingServer(tArgs); tserver.serve();
client端:
TTransport transport = new TFramedTransport(new TSocket(host, port)); transport.open(); TProtocol protocol = new TCompactProtocol(transport); Hello.Client client = new Hello.Client(protocol); ByteBuffer data = ByteBuffer.wrap("hello world".getBytes("UTF-8")); Response response = client.sendMessage(new Message(1, data)); System.out.println(response.getCode() + ", " + response.getMessage());
异步client端:
TAsyncClientManager asyncClientManager = new TAsyncClientManager(); final TNonblockingTransport nonblockingTransport = new TNonblockingSocket(Configuration.HOST, Configuration.SERVER_PORT, Configuration.TIMEOUT); TProtocolFactory protocolFactory = new TCompactProtocol.Factory(); final Hello.AsyncClient client = new Hello.AsyncClient(protocolFactory, asyncClientManager, nonblockingTransport); client.helloBoolean(true, new AsyncMethodCallback<Hello.AsyncClient.helloBoolean_call>() { @Override public void onComplete(helloBoolean_call response) { try { System.out.println(response.getResult()); } catch (TException e) { e.printStackTrace(); } } @Override public void onError(Exception ex) { ex.printStackTrace(); } });
4、通讯层采用SSL安全认证
server端:
TSSLTransportParameters params = new TSSLTransportParameters(); params.setKeyStore("server.jks", "123456", "SunX509", "JKS"); TServerTransport serverTransport = TSSLTransportFactory.getServerSocket(Configuration.SERVER_PORT, Configuration.TIMEOUT, null, params); TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl()); TThreadPoolServer.Args tArgs = new TThreadPoolServer.Args(serverTransport); tArgs.processor(processor); tArgs.protocolFactory(new TBinaryProtocol.Factory()); server = new TThreadPoolServer(tArgs); server.serve();
client端:
TSSLTransportParameters params = new TSSLTransportParameters(); params.setTrustStore("CA.jks", "123456", "SunX509", "JKS"); transport = TSSLTransportFactory .getClientSocket(Configuration.HOST, Configuration.SERVER_PORT, Configuration.TIMEOUT, params); TProtocol protocol = new TBinaryProtocol(transport); Hello.Client client = new Hello.Client(protocol); ByteBuffer data = ByteBuffer.wrap("hello world".getBytes("UTF-8")); client.sendMessage(new Message(1, data));
5、多处理器服务模型
server端:
TMultiplexedProcessor processor = new TMultiplexedProcessor(); processor.registerProcessor("helloService", new Hello.Processor<Hello.Iface>(new HelloServiceImpl())); TServerSocket serverTransport = new TServerSocket(Configuration.SERVER_PORT, Configuration.TIMEOUT); TThreadPoolServer.Args tArgs = new TThreadPoolServer.Args(serverTransport); tArgs.requestTimeoutUnit(TimeUnit.MILLISECONDS); tArgs.requestTimeout(5000); tArgs.protocolFactory(new TBinaryProtocol.Factory()); tArgs.processor(processor); TServer server = new TThreadPoolServer(tArgs); server.serve();
client端:
TTransport transport = new TSocket(Configuration.HOST, Configuration.SERVER_PORT, Configuration.TIMEOUT); transport.open(); TProtocol protocol = new TBinaryProtocol(transport); TMultiplexedProtocol multiplexedProtocol = new TMultiplexedProtocol(protocol, "helloService"); Hello.Client client = new Hello.Client(multiplexedProtocol); ByteBuffer data = ByteBuffer.wrap("hello world".getBytes("UTF-8")); client.sendMessage(new Message(1, data));
6、半同步半异步服务模型
server端:
TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl()); TNonblockingServerSocket socketTransport = new TNonblockingServerSocket(Configuration.SERVER_PORT); THsHaServer.Args thhsArgs = new THsHaServer.Args(socketTransport); thhsArgs.processor(processor); thhsArgs.transportFactory(new TFramedTransport.Factory()); thhsArgs.protocolFactory(new TCompactProtocol.Factory()); TServer server = new THsHaServer(thhsArgs); server.serve();
client端:
TTransport transport = new TFramedTransport(new TSocket(Configuration.HOST, Configuration.SERVER_PORT, Configuration.TIMEOUT)); transport.open(); TProtocol protocol = new TCompactProtocol(transport); Hello.Client client = new Hello.Client(protocol); ByteBuffer data = ByteBuffer.wrap("hello world".getBytes("UTF-8")); client.sendMessage(new Message(1, data));
7、TThreadedSelectorServer使用范例
服务端:
TMultiplexedProcessor multiplexedProcessor = new TMultiplexedProcessor(); multiplexedProcessor.registerProcessor("Hello", new Hello.Processor<Hello.Iface>(new HelloServiceImpl())); TNonblockingServerTransport transport = new TNonblockingServerSocket(Configuration.SERVER_PORT, Configuration.TIMEOUT); TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(transport); tArgs.processor(multiplexedProcessor); tArgs.transportFactory(new TFramedTransport.Factory()); tArgs.protocolFactory(new TCompactProtocol.Factory()); tArgs.selectorThreads(5); tArgs.workerThreads(50); TServer server = new TThreadedSelectorServer(tArgs); server.serve();
客户端:
TTransport transport = new TFramedTransport(new TSocket(Configuration.HOST, Configuration.SERVER_PORT, Configuration.TIMEOUT)); transport.open(); TProtocol protocol = new TCompactProtocol(transport); TMultiplexedProtocol multiplexedProtocol = new TMultiplexedProtocol(protocol, "Hello"); client = new Hello.Client(multiplexedProtocol); System.out.println(client.helloString("hello string")); ByteBuffer data = ByteBuffer.wrap("hello world".getBytes("UTF-8")); Response response = client.sendMessage(new Message(1, data)); System.out.println(response.getCode() + ", " + response.getMessage());
相关推荐
标题"免安装,直接生成thrift代码工具(0.9.1版本)"指的是一个特定版本的Thrift代码生成工具,即0.9.1版,该版本无需安装,可以直接运行,为开发者提供了便利。这个工具允许用户快速便捷地生成Thrift定义的服务在...
2. **生成代码**:使用Thrift编译器将`test.thrift`文件转换为特定语言的代码。例如,如果我们需要Java代码,可以运行以下命令: ``` thrift -gen java test.thrift ``` 这将在当前目录下生成一个`gen-java`...
Scrooge 是一个 Thrift 代码解析/生成器,能够生成 Scala 和 Java 代码。这就意味着,它能够取代 Apache Thrift 代码生成器,并能在 libthrift 上生成符合标准的可兼容的二进制编解码。 建议使用Scala语法生成...
Thrift通过定义一种中间表示(IDL,接口定义语言)来描述服务,然后自动生成对应语言的客户端和服务器端代码,使得不同语言之间可以进行高效、便捷的通信。本示例将详细阐述如何使用Java操作Thrift。 首先,让我们...
之后,Thrift提供了代码生成工具,它可以将`.thrift`文件转换为各种目标语言(如Java、Python、C++等)的客户端和服务器端代码。这些生成的代码包含了服务接口的实现模板,使得开发者可以在各自的语言环境中实现具体...
Thrift通过定义一种中间表示(IDL,Interface Description Language)来规范服务接口,然后自动生成对应各种编程语言的客户端和服务端代码,简化了跨平台的RPC(Remote Procedure Call)通信。 在Windows环境下使用...
在本示例中,我们将探讨如何使用 Thrift 的 Java 实现,以及提供的 Thrift0.9.1 版本的示例代码。 Thrift 的核心思想是通过定义一种中间表示(IDL,接口定义语言)来描述服务和数据类型。这些 IDL 文件被编译成各种...
在标题中提到的"thrift官方代码"通常指的是Thrift的源码仓库,其中包括了Thrift的编译器和各种语言的SDK。这些源码可以用于自定义编译或扩展Thrift的功能,以便满足特定项目的需求。Thrift的编译器负责将IDL文件转换...
在"thrift中间件实例代码"中,我们可以看到Thrift如何在实际应用中被使用。Thrift通过定义一种IDL(接口定义语言)来描述服务接口,然后自动生成各种目标语言(如Java、Python、C++等)的客户端和服务端代码。这样,...
你需要配置HBase的环境变量,并且需要编译Thrift2生成的HBase IDL文件,生成对应的Java客户端代码。 2. **建立连接**:使用`HBaseConfiguration.create()`创建一个配置对象,然后通过`ConnectionFactory.create...
2. **代码生成**:通过Thrift编译器,我们可以将`.thrift`文件转换为特定编程语言的代码,例如Java、Python或C++。这些生成的代码包括服务接口的抽象类、数据结构的类以及客户端和服务端的通信协议实现。 3. **...
2. 代码生成:使用Thrift编译器处理IDL文件,可以生成对应目标语言的客户端和服务端代码。这些代码包含了用于序列化和反序列化数据、实现服务接口以及调用服务的方法。 3. 传输层:Thrift支持多种传输协议,包括...
本例改编自Apache Thrift教程: http://mikecvet.wordpress.com/2010/05/13/apache-thrift-tutorial-the-sequel/ http://chanian.com/2010/05/13/thrift-tutorial-a-php-client/ 原教程使用的是c++ server和...
thrift web实例代码。使用thrift js时,PRotocol需要使用TJSONPRotocol/TBinaryProtocol协议,Thrift.Protocol对应的是TJSONPRotocol。Transport需要使用TXHRTransport/TWebSocketTransport通道,Thrift.Transport...
Thrift的编译器会根据这个定义生成Java、Python、C++等语言的客户端和服务端代码。 在“thrift实现http协议案例”中,由于Thrift默认只支持基于TCP的socket通信,而我们需要实现HTTP协议,所以需要自定义处理。这里...
Thrift RPC客户端的服务化框架代码主要涉及了两个关键概念:Thrift和RPC(Remote Procedure Call,远程过程调用)。Thrift是由Facebook开发的一种开源跨语言服务框架,它允许定义数据类型和服务接口,然后自动生成...
Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述服务,然后自动生成客户端和服务器端的代码,支持多种编程语言,包括Java。 在"Thrift双向通讯java代码"这个主题中,我们主要讨论如何使用...
2. **Thrift编译器**:Thrift提供了一个命令行工具,可以根据IDL文件生成不同编程语言的客户端和服务端代码。对于Go语言,它会生成包含接口和协议实现的代码。 3. **服务端实现**:在HBase中,服务端通常是由HBase...
2. **生成 Thrift 代码**:使用 Thrift 编译器将 IDL 文件转换为不同目标语言(如 Java)的代码。这会生成服务接口、数据结构类以及客户端和服务端的处理程序接口。在给定的文件列表中,可能已经包含了这些生成的...
总结起来,这个"Java中使用Thrift实现RPC示例代码"涵盖了Thrift服务的定义、Java代码的生成、服务端与客户端的实现,以及可能的Netty集成。通过学习这个示例,开发者可以深入理解Thrift在Java环境中的工作方式,以及...