半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。
服务端HelloTHsHaServer.java:
- package cn.slimsmart.thrift.demo.helloworld;
- import org.apache.thrift.TException;
- import org.apache.thrift.TProcessor;
- import org.apache.thrift.protocol.TBinaryProtocol;
- import org.apache.thrift.server.THsHaServer;
- import org.apache.thrift.server.TServer;
- import org.apache.thrift.transport.TFramedTransport;
- import org.apache.thrift.transport.TNonblockingServerSocket;
- /**
- * 注册服务端 半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。 THsHaServer
- * 非阻塞
- */
- public class HelloTHsHaServer {
- // 注册端口
- public static final int SERVER_PORT = 8080;
- public static void main(String[] args) throws TException {
- TProcessor tprocessor = new HelloWorld.Processor<HelloWorld.Iface>(new HelloWorldImpl());
- // 传输通道 - 非阻塞方式
- TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT);
- //半同步半异步
- THsHaServer.Args tArgs = new THsHaServer.Args(serverTransport);
- tArgs.processor(tprocessor);
- tArgs.transportFactory(new TFramedTransport.Factory());
- //二进制协议
- tArgs.protocolFactory(new TBinaryProtocol.Factory());
- // 半同步半异步的服务模型
- TServer server = new THsHaServer(tArgs);
- System.out.println("HelloTHsHaServer start....");
- server.serve(); // 启动服务
- }
- }
客户端HelloAsyncClient.java:
- package cn.slimsmart.thrift.demo.helloworld;
- import java.io.IOException;
- import java.util.concurrent.CountDownLatch;
- import java.util.concurrent.TimeUnit;
- import org.apache.thrift.TException;
- import org.apache.thrift.async.AsyncMethodCallback;
- import org.apache.thrift.async.TAsyncClientManager;
- import org.apache.thrift.protocol.TBinaryProtocol;
- import org.apache.thrift.protocol.TProtocolFactory;
- import org.apache.thrift.transport.TNonblockingSocket;
- import org.apache.thrift.transport.TNonblockingTransport;
- import cn.slimsmart.thrift.demo.helloworld.HelloWorld.AsyncClient.sayHello_call;
- /**
- * 客户端异步调用,服务端需使用TNonblockingServer ,THsHaServer
- */
- public class HelloAsyncClient {
- public static final String SERVER_IP = "127.0.0.1";
- public static final int SERVER_PORT = 8080;
- public static final int TIMEOUT = 30000;
- public static void main(String[] args) throws TException, IOException, InterruptedException {
- //异步调用管理器
- TAsyncClientManager clientManager = new TAsyncClientManager();
- //设置传输通道,调用非阻塞IO
- TNonblockingTransport transport = new TNonblockingSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
- // 协议要和服务端一致
- //TProtocolFactory tprotocol = new TCompactProtocol.Factory();
- TProtocolFactory tprotocol = new TBinaryProtocol.Factory();
- HelloWorld.AsyncClient asyncClient = new HelloWorld.AsyncClient(tprotocol, clientManager, transport);
- CountDownLatch latch = new CountDownLatch(1);
- AsynCallback callBack = new AsynCallback(latch);
- System.out.println("call method sayHello start ...");
- // 调用服务
- asyncClient.sayHello("jack", callBack);
- System.out.println("call method sayHello .... end");
- //等待完成异步调用
- boolean wait = latch.await(30, TimeUnit.SECONDS);
- System.out.println("latch.await =:" + wait);
- }
- }
- class AsynCallback implements AsyncMethodCallback<sayHello_call> {
- private CountDownLatch latch;
- public AsynCallback(CountDownLatch latch) {
- this.latch = latch;
- }
- @Override
- public void onComplete(sayHello_call response) {
- System.out.println("onComplete");
- try {
- System.out.println("AsynCall result :" + response.getResult().toString());
- } catch (TException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- latch.countDown();
- }
- }
- @Override
- public void onError(Exception exception) {
- System.out.println("onError :" + exception.getMessage());
- latch.countDown();
- }
- }
使用SSL加密协议:
- //SSL服务端
- TSSLTransportParameters parameters = new TSSLTransportParameters();
- //keystore文件 密码
- parameters.setKeyStore("../../.keystore", "thrift");
- TServerTransport serverTransport = TSSLTransportFactory.getServerSocket(8080, 3000, null, parameters);
- //SSL客户端
- TSSLTransportParameters parameters = new TSSLTransportParameters();
- parameters.setTrustStore("../../.trustore", "thrift", "SunX509", "JKS");
- TTransport tTransport = TSSLTransportFactory.getClientSocket("127.0.0.1", 8080, 3000, parameters);
http://blog.csdn.net/zhu_tianwei/article/details/44002943
相关推荐
服务端:支持Apache Thrift的各种原生服务线程模型,包括单线程阻塞模型(simple)、单线程非阻塞模型(nonBlocking)、线程池阻塞模型(threadPool)、半同步半异步模型(hsHa)和半同步半异步线程选择器模型...
此外,Thrift还支持异步调用、服务分层和负载均衡等高级特性,为构建大型分布式系统提供了强大的工具。 总之,Apache Thrift是一个强大的工具,尤其在需要多语言通信的场景下,可以极大地简化开发过程。通过学习和...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开发并贡献给了Apache基金会。...Thrift还提供了许多优化功能,如多线程处理、异步调用和高级数据序列化选项,使得它成为构建分布式系统时的一个强大工具。
Thrift 是一个跨语言的 RPC 框架,由 Facebook 开发,用于建立高性能的服务之间的远程过程调用。为了使用 Thrift,需要配置好相关的环境,这篇文章将介绍 Thrift 环境配置的方法。 Thrift 环境配置的重要性 -------...
客户端采用thrift协议,服务端支持netty和thrift的TThreadedSelectorServer半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,页面流量统计等,QPS统计,TP90,TP99,TP95等丰富可视化数据,...
4. **服务模型**:Thrift支持同步和异步服务模型,允许开发者根据实际需求选择合适的通信方式。 5. **客户端和服务器端库**:在解压后的`thrift-0.11.0`文件夹中,你会发现为每种支持的语言都提供了相应的客户端和...
3. **客户端调用**:客户端同样使用Thrift编译器生成的代码,创建服务代理对象,通过该对象调用远程服务的方法。Workerman-thrift提供了一个简单的客户端库,帮助开发者轻松地发起RPC请求。 4. **协议和传输层**:...
7. **异步编程**:Thrift支持异步编程模型,允许你在服务端实现非阻塞I/O,提高系统并发性能。 8. **模块化设计**:Thrift的设计允许服务拆分为多个独立的模块,每个模块可以通过Thrift接口进行交互,增强了系统的...
通过这个Java Thrift Demo,我们可以深入理解Thrift如何在Java中实现RPC通信,包括服务定义、代码生成、服务端实现、客户端调用等关键步骤。这对于初学者来说,是一个很好的起点,有助于进一步学习和应用Thrift进行...
- ** Dubbo**: 阿里巴巴开源的Java RPC框架,支持异步调用,广泛应用于大型分布式系统。 ### 5. 实现异步RPC的关键技术 - **事件驱动模型**: 如Reactor模式,通过事件循环处理I/O事件,实现非阻塞通信。 - **工作...
7. 异步编程模型:Thrift 提供了异步客户端和服务端的实现,允许开发者利用非阻塞I/O和事件驱动模型来提高系统性能。 8. 应用场景:Thrift 广泛应用于微服务、大数据处理、API 接口开发等领域,特别适合于需要跨...
Netty作为一款高性能、异步事件驱动的网络应用框架,结合Thrift这种高效的远程过程调用(RPC)框架,能够有效提升系统性能,实现大规模并发处理的能力。本文将深入探讨Netty与Thrift结合实现高并发高性能的关键技术...
在Qt中,可以使用QThread或者Qt的并发框架(如QFuture、QtConcurrent)来处理Thrift服务的异步调用,以避免阻塞UI。同时,Qt的网络模块(如QTcpServer和QTcpSocket)可以用来建立和管理网络连接。 在实际开发中,你...
4. **Thrift客户端调用**:"thriftclienttest"则可能是客户端调用服务的示例。客户端需要同样使用Thrift编译器生成的代码,创建服务代理对象,通过这个代理对象,可以像调用本地方法一样调用远程服务。 5. **序列化...
一个支持thrift协议的客户端工程,支持负载均衡、支持zookeeper service 节点自动发现、failover、异步连接池、异步调用模式等。 jdk version:jdk1.7+ QQ:814912127 QQ群:413012474 EMAIL: build service to client ...
- **服务器(Server)**:接收和处理来自客户端的请求,通常使用异步或同步模型。 在实际应用中,Thrift可以用于构建分布式系统中的微服务、实现跨语言的RPC(Remote Procedure Call)通信,或者作为数据交换的中间...
Thrift允许定义数据类型和服务接口,然后自动生成多种编程语言的代码,使得不同语言之间可以方便地进行二进制通信,实现了高效、轻量级的远程过程调用(RPC)。 在“thrift 教程”中,你可能会学习到以下几个关键...
4. **服务模型**: Thrift提供了两种服务模型——阻塞式(Blocking)和服务端异步(Non-Blocking/Sync)。阻塞式服务在处理每个请求时都会阻塞,直到请求完成;异步服务则允许同时处理多个请求,提高并发性能。 5. *...
11. 异步调用:允许非阻塞的异步调用,服务器可以并行处理请求。 12. 异常处理:支持标准和自定义异常。 然而,Thrift 也有一些限制和不支持的特性: 1. 不支持循环结构体:结构体不能包含自身。 2. 没有结构体...
Thrift通过高效的二进制传输格式和异步/同步调用模式,确保了跨语言、跨平台的高效通信。 总的来说,Thrift是一个强大的工具,它简化了分布式系统开发中的通信难题,提供了统一的接口定义和代码生成机制,使得开发...