`

Thrift 半同步半异步的服务模型-THsHaServer(异步调用客户端)

阅读更多

 

半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。

服务端HelloTHsHaServer.java:

 

[java] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. package cn.slimsmart.thrift.demo.helloworld;  
  2.   
  3. import org.apache.thrift.TException;  
  4. import org.apache.thrift.TProcessor;  
  5. import org.apache.thrift.protocol.TBinaryProtocol;  
  6. import org.apache.thrift.server.THsHaServer;  
  7. import org.apache.thrift.server.TServer;  
  8. import org.apache.thrift.transport.TFramedTransport;  
  9. import org.apache.thrift.transport.TNonblockingServerSocket;  
  10.   
  11. /** 
  12.  * 注册服务端 半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。 THsHaServer 
  13.  * 非阻塞 
  14.  */  
  15. public class HelloTHsHaServer {  
  16.     // 注册端口  
  17.     public static final int SERVER_PORT = 8080;  
  18.   
  19.     public static void main(String[] args) throws TException {  
  20.         TProcessor tprocessor = new HelloWorld.Processor<HelloWorld.Iface>(new HelloWorldImpl());  
  21.         // 传输通道 - 非阻塞方式    
  22.         TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT);  
  23.         //半同步半异步  
  24.         THsHaServer.Args tArgs = new THsHaServer.Args(serverTransport);  
  25.         tArgs.processor(tprocessor);  
  26.         tArgs.transportFactory(new TFramedTransport.Factory());  
  27.         //二进制协议  
  28.         tArgs.protocolFactory(new TBinaryProtocol.Factory());  
  29.         // 半同步半异步的服务模型  
  30.         TServer server = new THsHaServer(tArgs);  
  31.         System.out.println("HelloTHsHaServer start....");  
  32.         server.serve(); // 启动服务  
  33.     }  
  34. }  

客户端HelloAsyncClient.java

 

 

[java] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. package cn.slimsmart.thrift.demo.helloworld;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.concurrent.CountDownLatch;  
  5. import java.util.concurrent.TimeUnit;  
  6.   
  7. import org.apache.thrift.TException;  
  8. import org.apache.thrift.async.AsyncMethodCallback;  
  9. import org.apache.thrift.async.TAsyncClientManager;  
  10. import org.apache.thrift.protocol.TBinaryProtocol;  
  11. import org.apache.thrift.protocol.TProtocolFactory;  
  12. import org.apache.thrift.transport.TNonblockingSocket;  
  13. import org.apache.thrift.transport.TNonblockingTransport;  
  14.   
  15. import cn.slimsmart.thrift.demo.helloworld.HelloWorld.AsyncClient.sayHello_call;  
  16.   
  17. /** 
  18.  * 客户端异步调用,服务端需使用TNonblockingServer ,THsHaServer 
  19.  */  
  20. public class HelloAsyncClient {  
  21.     public static final String SERVER_IP = "127.0.0.1";  
  22.     public static final int SERVER_PORT = 8080;  
  23.     public static final int TIMEOUT = 30000;  
  24.   
  25.     public static void main(String[] args) throws TException, IOException, InterruptedException {  
  26.         //异步调用管理器  
  27.         TAsyncClientManager clientManager = new TAsyncClientManager();  
  28.         //设置传输通道,调用非阻塞IO  
  29.         TNonblockingTransport transport = new TNonblockingSocket(SERVER_IP, SERVER_PORT, TIMEOUT);  
  30.         // 协议要和服务端一致  
  31.         //TProtocolFactory tprotocol = new TCompactProtocol.Factory();  
  32.         TProtocolFactory tprotocol = new TBinaryProtocol.Factory();  
  33.           
  34.         HelloWorld.AsyncClient asyncClient = new HelloWorld.AsyncClient(tprotocol, clientManager, transport);  
  35.         CountDownLatch latch = new CountDownLatch(1);  
  36.         AsynCallback callBack = new AsynCallback(latch);  
  37.         System.out.println("call method sayHello start ...");  
  38.         // 调用服务  
  39.         asyncClient.sayHello("jack", callBack);  
  40.         System.out.println("call method sayHello .... end");  
  41.         //等待完成异步调用  
  42.         boolean wait = latch.await(30, TimeUnit.SECONDS);  
  43.         System.out.println("latch.await =:" + wait);  
  44.     }  
  45. }  
  46. class AsynCallback implements AsyncMethodCallback<sayHello_call> {  
  47.     private CountDownLatch latch;  
  48.   
  49.     public AsynCallback(CountDownLatch latch) {  
  50.         this.latch = latch;  
  51.     }  
  52.   
  53.     @Override  
  54.     public void onComplete(sayHello_call response) {  
  55.         System.out.println("onComplete");  
  56.         try {  
  57.             System.out.println("AsynCall result :" + response.getResult().toString());  
  58.         } catch (TException e) {  
  59.             e.printStackTrace();  
  60.         } catch (Exception e) {  
  61.             e.printStackTrace();  
  62.         } finally {  
  63.             latch.countDown();  
  64.         }  
  65.     }  
  66.     @Override  
  67.     public void onError(Exception exception) {  
  68.         System.out.println("onError :" + exception.getMessage());  
  69.         latch.countDown();  
  70.     }  
  71. }  

 

使用SSL加密协议:

 

[java] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. //SSL服务端  
  2.         TSSLTransportParameters parameters = new TSSLTransportParameters();  
  3.         //keystore文件  密码  
  4.         parameters.setKeyStore("../../.keystore""thrift");  
  5.         TServerTransport serverTransport = TSSLTransportFactory.getServerSocket(80803000null, parameters);  
  6.           
  7.         //SSL客户端  
  8.         TSSLTransportParameters parameters = new TSSLTransportParameters();  
  9.         parameters.setTrustStore("../../.trustore""thrift""SunX509""JKS");  
  10.         TTransport tTransport = TSSLTransportFactory.getClientSocket("127.0.0.1"80803000, parameters);  

 

http://blog.csdn.net/zhu_tianwei/article/details/44002943

 

分享到:
评论

相关推荐

    spring-cloud-starter-thrift:spring-cloud-starter-thrift提供SpringCloud对可伸缩的跨语言服务调用框架Apache Thrift的封装和集成

    服务端:支持Apache Thrift的各种原生服务线程模型,包括单线程阻塞模型(simple)、单线程非阻塞模型(nonBlocking)、线程池阻塞模型(threadPool)、半同步半异步模型(hsHa)和半同步半异步线程选择器模型...

    Thrift在PHP中简单使用示例--远程服务调用框架

    此外,Thrift还支持异步调用、服务分层和负载均衡等高级特性,为构建大型分布式系统提供了强大的工具。 总之,Apache Thrift是一个强大的工具,尤其在需要多语言通信的场景下,可以极大地简化开发过程。通过学习和...

    基于thrift开发的客户端和服务端

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开发并贡献给了Apache基金会。...Thrift还提供了许多优化功能,如多线程处理、异步调用和高级数据序列化选项,使得它成为构建分布式系统时的一个强大工具。

    thrift环境配置方法

    Thrift 是一个跨语言的 RPC 框架,由 Facebook 开发,用于建立高性能的服务之间的远程过程调用。为了使用 Thrift,需要配置好相关的环境,这篇文章将介绍 Thrift 环境配置的方法。 Thrift 环境配置的重要性 -------...

    koalas-rpc:企业生产级百亿日PV高可用可拓展的RPC框架。理论上并发数量接近服务器带宽,客户端采用thrift协议,服务端支持netty和thrift的TThreadedSelectorServer半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,泛化调用,页面流量统计,泛化调用等,支持trace跟踪等,天然接入cat支持数据大盘展示等,持续为个人以及中小型公司提供可靠的RPC框架技术方案

    客户端采用thrift协议,服务端支持netty和thrift的TThreadedSelectorServer半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,页面流量统计等,QPS统计,TP90,TP99,TP95等丰富可视化数据,...

    thrift-0.11.0.tar.gz

    4. **服务模型**:Thrift支持同步和异步服务模型,允许开发者根据实际需求选择合适的通信方式。 5. **客户端和服务器端库**:在解压后的`thrift-0.11.0`文件夹中,你会发现为每种支持的语言都提供了相应的客户端和...

    workerman-thrift, Thrift RPC for php based on workerman..zip

    3. **客户端调用**:客户端同样使用Thrift编译器生成的代码,创建服务代理对象,通过该对象调用远程服务的方法。Workerman-thrift提供了一个简单的客户端库,帮助开发者轻松地发起RPC请求。 4. **协议和传输层**:...

    thrift-0.9.0.tar.gz

    7. **异步编程**:Thrift支持异步编程模型,允许你在服务端实现非阻塞I/O,提高系统并发性能。 8. **模块化设计**:Thrift的设计允许服务拆分为多个独立的模块,每个模块可以通过Thrift接口进行交互,增强了系统的...

    Java Thrift demo例子

    通过这个Java Thrift Demo,我们可以深入理解Thrift如何在Java中实现RPC通信,包括服务定义、代码生成、服务端实现、客户端调用等关键步骤。这对于初学者来说,是一个很好的起点,有助于进一步学习和应用Thrift进行...

    异步的 RPC

    - ** Dubbo**: 阿里巴巴开源的Java RPC框架,支持异步调用,广泛应用于大型分布式系统。 ### 5. 实现异步RPC的关键技术 - **事件驱动模型**: 如Reactor模式,通过事件循环处理I/O事件,实现非阻塞通信。 - **工作...

    thrift 0.9.2

    7. 异步编程模型:Thrift 提供了异步客户端和服务端的实现,允许开发者利用非阻塞I/O和事件驱动模型来提高系统性能。 8. 应用场景:Thrift 广泛应用于微服务、大数据处理、API 接口开发等领域,特别适合于需要跨...

    netty+thrift高并发高性能

    Netty作为一款高性能、异步事件驱动的网络应用框架,结合Thrift这种高效的远程过程调用(RPC)框架,能够有效提升系统性能,实现大规模并发处理的能力。本文将深入探讨Netty与Thrift结合实现高并发高性能的关键技术...

    C++(Qt)下的thrift的使用示例

    在Qt中,可以使用QThread或者Qt的并发框架(如QFuture、QtConcurrent)来处理Thrift服务的异步调用,以避免阻塞UI。同时,Qt的网络模块(如QTcpServer和QTcpSocket)可以用来建立和管理网络连接。 在实际开发中,你...

    thrift例子

    4. **Thrift客户端调用**:"thriftclienttest"则可能是客户端调用服务的示例。客户端需要同样使用Thrift编译器生成的代码,创建服务代理对象,通过这个代理对象,可以像调用本地方法一样调用远程服务。 5. **序列化...

    thrift-protocol-client:一个支持thrift协议的客户端工程,支持负载均衡、failover、异步连接池、异步调用模式等

    一个支持thrift协议的客户端工程,支持负载均衡、支持zookeeper service 节点自动发现、failover、异步连接池、异步调用模式等。 jdk version:jdk1.7+ QQ:814912127 QQ群:413012474 EMAIL: build service to client ...

    thrift基础文档

    - **服务器(Server)**:接收和处理来自客户端的请求,通常使用异步或同步模型。 在实际应用中,Thrift可以用于构建分布式系统中的微服务、实现跨语言的RPC(Remote Procedure Call)通信,或者作为数据交换的中间...

    thrift 教程

    Thrift允许定义数据类型和服务接口,然后自动生成多种编程语言的代码,使得不同语言之间可以方便地进行二进制通信,实现了高效、轻量级的远程过程调用(RPC)。 在“thrift 教程”中,你可能会学习到以下几个关键...

    thrift入门

    4. **服务模型**: Thrift提供了两种服务模型——阻塞式(Blocking)和服务端异步(Non-Blocking/Sync)。阻塞式服务在处理每个请求时都会阻塞,直到请求完成;异步服务则允许同时处理多个请求,提高并发性能。 5. *...

    thrift介绍、各种server的比较、多接口服务实现

    11. 异步调用:允许非阻塞的异步调用,服务器可以并行处理请求。 12. 异常处理:支持标准和自定义异常。 然而,Thrift 也有一些限制和不支持的特性: 1. 不支持循环结构体:结构体不能包含自身。 2. 没有结构体...

    thrift代码生成工具和所需jar

    Thrift通过高效的二进制传输格式和异步/同步调用模式,确保了跨语言、跨平台的高效通信。 总的来说,Thrift是一个强大的工具,它简化了分布式系统开发中的通信难题,提供了统一的接口定义和代码生成机制,使得开发...

Global site tag (gtag.js) - Google Analytics