潍坊门户网站建设,做百度网站费用,免费游戏网页入口,九天智能建站软件以下是一个 使用多路复用#xff08;TMultiplexedProtocol#xff09; 的 Thrift 客户端完整流程和关键函数#xff08;以 Java 为例#xff09;#xff0c;适用于当服务端使用 TMultiplexedProcessor 注册了多个服务时#xff0c;客户端可以区分并调用不同的服务。 ✅ 客…
以下是一个 使用多路复用TMultiplexedProtocol 的 Thrift 客户端完整流程和关键函数以 Java 为例适用于当服务端使用 TMultiplexedProcessor 注册了多个服务时客户端可以区分并调用不同的服务。 ✅ 客户端整体流程使用 TMultiplexedProtocol
1. 定义多个服务以两个为例 // example1.thrift
namespace java exampleservice ExampleService1 {string sayHello(1:string name)
}// example2.thrift
namespace java exampleservice ExampleService2 {i32 add(1:i32 a, 2:i32 b)
} 使用 Thrift 编译器生成 Java 代码 thrift --gen java example1.thrift
thrift --gen java example2.thrift 2. 服务端使用多路复用服务端部分简略 TMultiplexedProcessor multiplexedProcessor new TMultiplexedProcessor();multiplexedProcessor.registerProcessor(ExampleService1, new ExampleService1.Processor(new ExampleService1Impl()));
multiplexedProcessor.registerProcessor(ExampleService2, new ExampleService2.Processor(new ExampleService2Impl()));TServerTransport serverTransport new TServerSocket(9090);
TServer server new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(multiplexedProcessor));
server.serve(); 3. 客户端实现核心 import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TMultiplexedProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;import example.ExampleService1;
import example.ExampleService2;public class ThriftClient {public static void main(String[] args) {TTransport transport null;try {// 1. 打开传输层连接transport new TSocket(localhost, 9090);transport.open();// 2. 创建基础协议TProtocol baseProtocol new TBinaryProtocol(transport);// 3. 使用多路复用协议针对不同服务TMultiplexedProtocol protocol1 new TMultiplexedProtocol(baseProtocol, ExampleService1);TMultiplexedProtocol protocol2 new TMultiplexedProtocol(baseProtocol, ExampleService2);// 4. 创建客户端 Stub代理ExampleService1.Client client1 new ExampleService1.Client(protocol1);ExampleService2.Client client2 new ExampleService2.Client(protocol2);// 5. 调用服务方法String greeting client1.sayHello(Alice);int result client2.add(5, 7);System.out.println(Service1 response: greeting);System.out.println(Service2 response: result);} catch (Exception e) {e.printStackTrace();} finally {// 6. 关闭连接if (transport ! null) {transport.close();}}}
} 4. C 版本客户端实现 客户端代码C #include
#include
#include
#include #include ExampleService1.h
#include ExampleService2.husing namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;int main() {try {// 客户端连接std::shared_ptr socket(new TSocket(localhost, 9090));std::shared_ptr transport(new TBufferedTransport(socket));std::shared_ptr protocol(new TBinaryProtocol(transport));transport-open();// 使用多路复用协议TMultiplexedProtocol protocol1(protocol, ExampleService1);TMultiplexedProtocol protocol2(protocol, ExampleService2);// 创建客户端ExampleService1Client client1(protocol1);ExampleService2Client client2(protocol2);// 调用服务std::string greeting;client1.sayHello(greeting, Alice);std::cout Response from ExampleService1: greeting std::endl;int result;client2.add(result, 5, 7);std::cout Response from ExampleService2: result std::endl;transport-close();} catch (const std::exception e) {std::cerr Error: e.what() std::endl;}return 0;
}客户端关键类和函数说明 类 / 函数 作用说明 TSocket(host, port) 创建客户端传输连接基于 TCP transport.open() 打开连接 TBinaryProtocol 使用二进制协议进行编码 TMultiplexedProtocol 多路复用协议用于标识服务名称 ExampleService1.Client 客户端代理调用服务方法 client1.sayHello(Alice) 实际调用远程服务端方法 transport.close() 关闭连接 ✅ 小提示 多路复用的关键是 服务端使用 TMultiplexedProcessor 注册服务带名字客户端用 TMultiplexedProtocol 创建不同服务的协议实例带同样的名字。