UDN-企业互联网技术人气社区

板块导航

浏览  : 709
回复  : 0

[讨论交流] 节俭与Java

[复制链接]
呵呵燕的头像 楼主
发表于 2016-11-28 13:35:27 | 显示全部楼层 |阅读模式
  节俭是啥

  阿帕奇节俭的软件架构,可扩展的跨语言服务的开发,结合​​了软件栈一个代码生成引擎来构建C ++,Java和Python和PHP,红宝石,二郎,Perl中,哈斯克尔,C#之间的高效无缝协作服务,可可的JavaScript,Node.js的,Smalltalk中,OCaml中和Delphi等语言。

  节俭是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook的为“大规模跨语言服务开发“而开发的。它通过一个代码生成引擎联合了一个软件栈,来创建不同程度的,无缝的跨平台高效服务,可以使用C#,C ++(基于POSIX兼容系统)。

  架构图

8.jpg


  节俭支持的通讯协议

  TBinaryProtocol - 一种简单的二进制格式,简单,但没有为空间效率而优化比文本协议处理起来更快,但更难于调试。

  TCompactProtocol - 更紧凑的二进制格式,处理起来通常同样高效。

  TDebugProtocol - 一种人类可读的文本格式,用来协助调试。

  TDenseProtocol - 与TCompactProtocol类似,将传输数据的元信息剥离。

  TJSONProtocol - 使用JSON对数据编码。

  TSimpleJSONProtocol - 一种只写协议,它不能被节俭解析,因为它使用JSON时丢弃了元数据适合用脚本语言来解析。

  支持的传输协议

  TFileTransport - 该传输协议会写文件。

  TFramedTransport - 当使用一个非阻塞服务器时,要求使用这个传输协议它按帧来发送数据,其中每一帧的开头是长度信息。

  TMemoryTransport - 使用存储器映射输入输出(Java的的实现使用了一个简单的ByteArrayOutputStream)

  TSocket - 使用阻塞的套接字I / O来传输。

  TZlibTransport - 用zlib的执行压缩用于连接另一个传输协议。

  节俭还提供众多的服务类型

  TNonblockingServer - 一个多线程服务器,它使用非阻塞I / O(Java的实现使用了NIO通道).TFramedTransport必须跟这个服务器配套使用。

  TSimpleServer - 一个单线程服务器,它使用标准的阻塞I / O测试时很有用。

  TThreadPoolServer - 一个多线程服务器,它使用标准的阻塞I / O。

  在IntelliJ IDEA的上编写节俭

7.jpg


  安装插件

  节俭支持插件

  新建一个Maven的项目

6.jpg


  引入必须的包

  org.apache.thrift:libthrift:0.9.3

  org.slf4j:SLF4J的API:1.7.21

  对Java简单的日志门面:1.7.21

5.jpg


  配置编译环境

  9584冲泡安装提振

  9588酿造的libevent安装

  9611冲泡安装节俭

  9622冲泡安装野牛

  9629冲泡链接野牛-force

  9633冲泡安装Ant

4.jpg
3.jpg


  异步客户端

  1. 公共 类 ThriftClientSearchAlbums  实现 onGetData {
  2.     公共 静态 无效 的主要(字串[] args)  {
  3.         尝试 {
  4.             TAsyncClientManager clientManager = 新 TAsyncClientManager();
  5.             TNonblockingTransport运输= 新 TNonblockingSocket(“127.0.0.1” ,8191,5000);
  6.             TProtocolFactory tprotocol = 新 TCompactProtocol.Factory();
  7.             searchAlbums.AsyncClient asyncClient = 新 searchAlbums.AsyncClient(tprotocol,clientManager,运输);
  8.             CountDownLatch闩= 新 CountDownLatch(5);
  9.             AsynCallback回调= 新 AsynCallback(锁);
  10.             asyncClient.searchAlbumsByKeyword( “ 郭德纲”回调);
  11.             布尔等待= latch.await(30,TimeUnit.SECONDS);
  12.         } 赶上(TTransportException E){
  13.             e.printStackTrace();
  14.         } 赶上(TException E){
  15.             e.printStackTrace();
  16.         } 赶上(IOException异常五){
  17.             e.printStackTrace();
  18.         } 赶上(InterruptedException的E){
  19.             e.printStackTrace();
  20.         }
  21.     }
  22.     @覆盖
  23.     公共 无效 onGetDataListener ()  {
  24.     }
  25. }
复制代码

  异步服务器

  1. / **
  2. *通过在2016年11月25日bigmercu创建。
  3. *电子邮件:bigmercu@gmail.com
  4. * /
  5. 公共 类 ThriftServerSearchAlbums  {
  6.     @SuppressWarnings(“未登记”)
  7.     公共 无效 startserver的()  {
  8.         尝试 {
  9.             TProcessor tprocessor = 新 searchAlbums.AsyncProcessor <searchAlbums.AsyncIface>(新 searchAlbumsImpl());
  10.             TNonblockingServerSocket tnbSocketTransport = 新 TNonblockingServerSocket(8191);
  11.             TNonblockingServer.Args tnbArgs = 新 TNonblockingServer.Args(tnbSocketTransport);
  12.             tnbArgs.processor(tprocessor);
  13.             tnbArgs.transportFactory(新 TFramedTransport.Factory());
  14.             tnbArgs.protocolFactory(新 TCompactProtocol.Factory());
  15.             //使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式
  16.             TSERVER服务器= 新 TNonblockingServer(tnbArgs);
  17.             server.serve();
  18.         } 赶上(TTransportException E){
  19.             的System.out.println( “ 启动节俭服务器......错误!!!”);
  20.             e.printStackTrace();
  21.         }
  22.     }
  23.     公共 静态 无效 的主要(字串[] args)  {
  24.         ThriftServerSearchAlbums服务器= 新 ThriftServerSearchAlbums();
  25.         server.startServer();
  26.     }
  27. }
复制代码


  AsynCallback

  1. / **
  2. *通过在2016年11月27日bigmercu创建。
  3. *电子邮件:bigmercu@gmail.com
  4. * /
  5. 公共 类 AsynCallback  实现 AsyncMethodCallback < searchAlbumsByKeyword_call > {
  6.     私人 CountDownLatch闩锁;
  7.     私人 AlbumsEntity mAlbumsEntity;
  8.     公共 AsynCallback (CountDownLatch闩锁)  {
  9.         这 .latch =锁存器;
  10.     }
  11.     @覆盖
  12.     公共 无效 的onComplete (searchAlbumsByKeyword_call响应)  {
  13.         的System.out.println(latch.getCount());
  14.         尝试 {
  15.             的System.out.println(“AsynCall结果:” + response.getResult()的toString());
  16.         } 赶上(TException E){
  17.             e.printStackTrace();
  18.         } 赶上(例外五){
  19.             e.printStackTrace();
  20.         } 最后 {
  21.             latch.countDown();
  22.         }
  23.     }
  24.     @覆盖
  25.     公共 无效 onerror的(例外的例外)  {
  26.         的System.out.println(“onError的:” + exception.getMessage());
  27.         latch.countDown();
  28.     }
  29. }
复制代码


原文作者:佚名  来源:开发者头条

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部