`
raymond.chen
  • 浏览: 1437029 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Thrift代码范例

 
阅读更多

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代码生成工具,即0.9.1版,该版本无需安装,可以直接运行,为开发者提供了便利。这个工具允许用户快速便捷地生成Thrift定义的服务在...

    Thrift使用示例代码

    2. **生成代码**:使用Thrift编译器将`test.thrift`文件转换为特定语言的代码。例如,如果我们需要Java代码,可以运行以下命令: ``` thrift -gen java test.thrift ``` 这将在当前目录下生成一个`gen-java`...

    Thrift代码解析/生成器ScroogeTwitter.zip

    Scrooge 是一个 Thrift 代码解析/生成器,能够生成 Scala 和 Java 代码。这就意味着,它能够取代 Apache Thrift 代码生成器,并能在 libthrift 上生成符合标准的可兼容的二进制编解码。 建议使用Scala语法生成...

    采用java操作thrift代码示例

    Thrift通过定义一种中间表示(IDL,接口定义语言)来描述服务,然后自动生成对应语言的客户端和服务器端代码,使得不同语言之间可以进行高效、便捷的通信。本示例将详细阐述如何使用Java操作Thrift。 首先,让我们...

    thrift代码生成工具和所需jar

    之后,Thrift提供了代码生成工具,它可以将`.thrift`文件转换为各种目标语言(如Java、Python、C++等)的客户端和服务器端代码。这些生成的代码包含了服务接口的实现模板,使得开发者可以在各自的语言环境中实现具体...

    thrift在windows下生成C#代码

    Thrift通过定义一种中间表示(IDL,Interface Description Language)来规范服务接口,然后自动生成对应各种编程语言的客户端和服务端代码,简化了跨平台的RPC(Remote Procedure Call)通信。 在Windows环境下使用...

    Thrift 示例代码_Java

    在本示例中,我们将探讨如何使用 Thrift 的 Java 实现,以及提供的 Thrift0.9.1 版本的示例代码。 Thrift 的核心思想是通过定义一种中间表示(IDL,接口定义语言)来描述服务和数据类型。这些 IDL 文件被编译成各种...

    thrift官方代码+与dubbo集成支持原生thrift协议

    在标题中提到的"thrift官方代码"通常指的是Thrift的源码仓库,其中包括了Thrift的编译器和各种语言的SDK。这些源码可以用于自定义编译或扩展Thrift的功能,以便满足特定项目的需求。Thrift的编译器负责将IDL文件转换...

    thrift中间件实例代码

    在"thrift中间件实例代码"中,我们可以看到Thrift如何在实际应用中被使用。Thrift通过定义一种IDL(接口定义语言)来描述服务接口,然后自动生成各种目标语言(如Java、Python、C++等)的客户端和服务端代码。这样,...

    java代码使用thrift2操作hbase示例

    你需要配置HBase的环境变量,并且需要编译Thrift2生成的HBase IDL文件,生成对应的Java客户端代码。 2. **建立连接**:使用`HBaseConfiguration.create()`创建一个配置对象,然后通过`ConnectionFactory.create...

    Thrift简单调用demo代码

    2. **代码生成**:通过Thrift编译器,我们可以将`.thrift`文件转换为特定编程语言的代码,例如Java、Python或C++。这些生成的代码包括服务接口的抽象类、数据结构的类以及客户端和服务端的通信协议实现。 3. **...

    thrift入门教程+代码

    2. 代码生成:使用Thrift编译器处理IDL文件,可以生成对应目标语言的客户端和服务端代码。这些代码包含了用于序列化和反序列化数据、实现服务接口以及调用服务的方法。 3. 传输层:Thrift支持多种传输协议,包括...

    用C#和C++写的Apache 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 web实例代码。使用thrift js时,PRotocol需要使用TJSONPRotocol/TBinaryProtocol协议,Thrift.Protocol对应的是TJSONPRotocol。Transport需要使用TXHRTransport/TWebSocketTransport通道,Thrift.Transport...

    thrift实现http协议案例

    Thrift的编译器会根据这个定义生成Java、Python、C++等语言的客户端和服务端代码。 在“thrift实现http协议案例”中,由于Thrift默认只支持基于TCP的socket通信,而我们需要实现HTTP协议,所以需要自定义处理。这里...

    Thrift RPC客户端的服务化框架代码

    Thrift RPC客户端的服务化框架代码主要涉及了两个关键概念:Thrift和RPC(Remote Procedure Call,远程过程调用)。Thrift是由Facebook开发的一种开源跨语言服务框架,它允许定义数据类型和服务接口,然后自动生成...

    Thrift双向通讯java代码

    Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述服务,然后自动生成客户端和服务器端的代码,支持多种编程语言,包括Java。 在"Thrift双向通讯java代码"这个主题中,我们主要讨论如何使用...

    thrift-0.13.0.zip

    2. **Thrift编译器**:Thrift提供了一个命令行工具,可以根据IDL文件生成不同编程语言的客户端和服务端代码。对于Go语言,它会生成包含接口和协议实现的代码。 3. **服务端实现**:在HBase中,服务端通常是由HBase...

    spring与thrift集成

    2. **生成 Thrift 代码**:使用 Thrift 编译器将 IDL 文件转换为不同目标语言(如 Java)的代码。这会生成服务接口、数据结构类以及客户端和服务端的处理程序接口。在给定的文件列表中,可能已经包含了这些生成的...

    Java中使用Thrift实现RPC示例代码.rar

    总结起来,这个"Java中使用Thrift实现RPC示例代码"涵盖了Thrift服务的定义、Java代码的生成、服务端与客户端的实现,以及可能的Netty集成。通过学习这个示例,开发者可以深入理解Thrift在Java环境中的工作方式,以及...

Global site tag (gtag.js) - Google Analytics