热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我的RPC服务构建之路《客户端篇改造基于jdk8的thriftpoolclient》

    当我们淡到RPC服务框架,放眼世界范围,我目前知道的主流有thrift,fingle,grpc等。当然大型互联网公司都会有自己的RPC服务与治理框架。经过一段时间的调研,本

       当我们淡到RPC服务框架,放眼世界范围,我目前知道的主流有thrift,fingle,grpc等。当然大型互联网公司都会有自己的RPC服务与治理框架。经过一段时间的调研,本着简单,高效的原则,最终选择thrift.具体原因,等接下来写到服务篇的时候再细说。

       对于曾经使用过thrift来开发RPC服务的同学来讲,经常碰到就是client去连server端的时候,程序首先要声明连接协议,我们以socket为例。然后开始连接到服务端,调用远端的方法,关闭连接。

代码片断如下:

《我的RPC服务构建之路《客户端篇--改造基于jdk8的thrift pool client》》

伴随着服务越来越多,如果我们的代码中充斥这些duplicate code,心里总是痒痒的,非得把它干掉。联想到当初最开始写 jdbc常用的crud方法那段时间,代码里面也是挺多的open,close种种。其实想想,如果能有连接池,这个问题也就好解决了。于是,首先在github上找找,有没有现成的实现。果然,有一位前辈已经实现了。于是果断下载,地址是https://github.com/PhantomThief/thrift-pool-client。

下面是这个客户端所实现的功能,感觉还是相当不错的。

A Thrift Client pool for Java

raw and type safe TServiceClient pool

Multi backend servers support

Backend servers replace on the fly

Backend route by hash or random

Failover and failback support

jdk 1.8 only

不过,看了md之后,发现only support jdk8。心里凉了半截,难道老外都在用jdk8了?于是花了半天时 间,熟读了新的语法之后,准备改造前辈的代码。通读代码之后,发现里面有好几个类使用lambda语法,flatmap,collection,filter.另外就是函数是编程function.最后还有Supplier。好在guava已经实现了后两者,我只需要改改lambda的语法。

核心类说明:

ThriftClientImpl:它是客户端的实现类,主要是业务方经常用到的iface方法,先看图:


《我的RPC服务构建之路《客户端篇--改造基于jdk8的thrift pool client》》

《我的RPC服务构建之路《客户端篇--改造基于jdk8的thrift pool client》》

里面有两段代码需要改动。第一个就是设置执行的方法过滤,第二个是代理方法里面调用,实际就是业务方真正调用的方法块。关键点是javassist它是一种字节码处理技术,可以动态改变方法块。本段代码其实类似一个代理工厂,它代理了所有业务服务的执行片断

DefaultThriftConnectionPoolImpl,ThriftConnectionFactory:thrift连接池实现,基本是apache pool的通用连接池处理。

其中sokcet.open对应着makeobject.socket.close对应着destroyobject


《我的RPC服务构建之路《客户端篇--改造基于jdk8的thrift pool client》》

ThriftClientUtils:这个类有一个获取接口中所有方法的名称集合的方法,把lambda的语法改成熟悉的方式。


《我的RPC服务构建之路《客户端篇--改造基于jdk8的thrift pool client》》

其它类也是做了相关调整,这里就不一一说明了。最后讲一下调用。

1连接池初始化

《我的RPC服务构建之路《客户端篇--改造基于jdk8的thrift pool client》》

2 构建单例的rpc服务,因为rpc服务可能在多台机器上,所以会有分片

《我的RPC服务构建之路《客户端篇--改造基于jdk8的thrift pool client》》

3 协议的声明

《我的RPC服务构建之路《客户端篇--改造基于jdk8的thrift pool client》》

4 调用

《我的RPC服务构建之路《客户端篇--改造基于jdk8的thrift pool client》》

5结果,因为我有一个简单的计算服务,已经发布在测试机器了,这里就是1+99的结果。

《我的RPC服务构建之路《客户端篇--改造基于jdk8的thrift pool client》》

主体写完了,改天会把github的地址贴上来,请随时关注。更新地址 —-》》》thrift-pool-client


推荐阅读
  • 阿里云监控URL的配置笔记
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了阿里云监控URL的配置笔记相关的知识,希望对你有一定的参考价值。有很多细节需要记录 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 在这分布式系统架构盛行的时代,很多互联网大佬公司开源出自己的分布式RPC系统框架,例如:阿里的dubbo,谷歌的gRPC,apache的Thrift。而在我们公司一直都在推荐使用d ... [详细]
  • 基于.NET Core框架nacos的简单应用
    什么是Nacos?服务(Service)是Nacos世界的一等公民。Nacos支持 ... [详细]
  • 0.编写.proto文件:syntaxproto3;optionjava_multiple_filestrue;optionjava_packageio.grp ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • golang反射,golang反射性能
    本文目录一览:1、关于反射2、尝试用golan ... [详细]
  • ASP.NET CORE 简介
    ASP.NETCore是一个跨平台的高性能开源框架,用于生成启用云且连接Internet的新式应用。使用ASP.NETCore,您可以:生成Web ... [详细]
author-avatar
蓝俊明伟伦淑舜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有