范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

第02篇手写JavaRPC框架之设计思路

  天下代码一大抄, 抄来抄去有提高, 看你会抄不会抄!
  一、前言
  隔壁老李又在喷我了: "完犊子了,小编这绝对是为了骗粉丝,而水的一篇文章,到了第二篇竟然还没有开始写代码,又是一篇纯概念文章"。
  我也想写代码,但是在没有讲清楚思路之前,一定不要上来就蛮干 ,不然就毫无设计可言了。小编向各位观众老爷保证,下一篇文章绝对上代码。
  本篇文章非常重要,这是我们本系列文章中的重中之重,本篇文章的主要内容就是设计我们自己的通信协议及架构,可以这样说如果没有了本篇文章的内容,就不可能实现RPC。因为RPC的最基本要求就是能实现远程通信。本篇文章是讲述通信层的设计思路,下一篇就是实战的编写。(ps: 其实下一篇比较好写,因为代码我早就写完了嘻嘻,而这一篇竟然酝酿了一周还写的...不忍直视) 二、目标
  本篇文章主要会围绕以下三方面展开叙述,希望在通读全篇后,大家都能在脑子中形成对这三个方面的认识,因为下面的三个方面是通信层搭建的主要指导思想。
  设计我们自己的通信协议 确定我们的通信层的架构 确定我们的工程结构 2.1 为什么我们要设计自己的通信协议呢?
  上一篇我们也说了,实现RPC可以基于http也可以基于tcp。他们各有各的好处,如果是基于http其实我们的挑战就相对比较小一些,因为实现http的协议已经是在太多了,我们只用通过代理进行层层封装即可,而我们之所以要自己实现通信协议就是。
  作为Java程序猿还是要对底层通信协议的具体实现有点了解的。如果不了解的话也没关系,你只要知道他是二进制数据就可以了。 我们一步一步通过代码编写将二进制数据转换成我们Java语言能够认识的数据就好了 。如果这个过程你学会了,那么一通百通,http如何实现的其实大概也能知道猜到一点。 2.2 为什么要讲通信层的架构?
  怎么理解架构?
  作为一个有经验的开发者,都会清楚,我们写代码就如同写文章。好的代码一定是思路清晰的,思路清晰的代码耦合性一定是很少的。我们举一个例子,最近大环境不好,大厂裁员较多,很多小伙伴都要面试吧,就举一个面试的问题,通过这个例子来解释下什么是架构。 面试官说: 同学做一下自我介绍吧。
  首先我们不能懵啊,如果懵了就说明没有头绪了,这样就容易讲乱,没有头绪在开发过程中的体现就是代码写的杂乱。比如你在介绍家乡的时候突然穿插了一下爱好,而在讲爱好的时候,又穿插的讲了一下家乡。这样就会导致主题不分明,听者会感觉会乱。所以这里我们就需要  单一职责 。首先定义清楚你的讲话的结构,然后每个结构点就一个职责。
  如下我们设计的面试架构是这些点:
  姓名,家乡,大学,专业,兴趣爱好,单位职称 .
  下面我们只用实现每个点的内容(主题清晰),最终将他组装成完成的自我介绍回答; // 姓名,家乡,大学,专业,兴趣爱好,单位职称 public interface Introduce{     // 这是一个介绍类,负责介绍自己     public void introduce();}public class XiaoMing implements Introduce{     // 将任务进行拆分,拆分的维度是逻辑顺序,然后抽离出方法,抽离的维度是单一职责。     // 这样的好处是工能化,模块化,便于复用。     public void introduce(){         sout("我叫小明");         // 主题介绍家乡         introduceHometown();         // 主题介绍学校         introduceSchool();         // 主题介绍专业         introduceMajor();         // 主题介绍兴趣爱好         introduceInterest();         sout("从业xx年,目前在公司的职称是xxx");     }         private void introduceHometown(){         sout("我的老家是河南南阳")         sout("我的家乡就坐落在河南南阳邓州市")         sout("邓州市一个美丽的城市,是中国邓姓的发源地")         sout("邓州也是河南境内人口最多的一个县级城市")     }          private void introduceSchool(){         sout("我大学是在河南大学")         sout("河南大学简称河大,是一所位于中国河南省开封市涵盖文、史、哲、经、管、         法、理、工、医、农、教育、艺术等12个学科门类的省部共建型综合性公立大学。")     }          private void introduceMajor(){         sout("我的专业是计算机与信息工程")     }          private void introduceInterest(){         sout("我的个人爱好是写博客、打游戏、做美食、偶会也会跑跑步")     }}
  有没有发现单一职责的设计,会很大程度提高我们的代码利用率呢? 我们要的就是这个效果,所以我们在开始编码之前,最好提前定义清楚我们的架构是怎么样的。
  上面的例子,不知道小编有没有给大家解释清楚,但是总归我们的目的,是要在设计的时候就要 明确责任划分,尽可能的单一职责 。尽可能的解耦。
  要想设计一个好的框架,首先一定要有一个好的架构设计。这一点我们可以直接参考dubbo的设计架构。
  上半部分不用看,我们只用看通信层就好了。 serialize 序列化层,负责将二进制数据转成Java认识的数据类型 transport 传输层,负责发送和接收数据 exchange 转换层,通信层和业务逻辑层转换的地方。 protocol 协议层,告诉serialize用什么协议来encode和decode数据的
  所以说, 天下代码一大抄,抄来抄去有提高,就看你会抄不会抄了 。 我们的设计就主要参考dubbo来了。 2.3 工程结构设计
  目前市面上的框架基本上都是自己来定制通信层,而通信层基本也不会单独的提供出去。但是本系列小编希望是通信层和业务能分开。通信层可以做RPC也可以利用通信层去实现消息队列或者是web容器。所以因为这个设计,就要求我们的项目能单独的去发布。所以我们整体的项目结构是由三个部分组成的,如下。
  三、核心知识点3.1 通信层协议定义
  什么是协议呢?
  其实就是规则,我们按照什么样的方式将二进制数据转换成Java对象。
  如下图,我们的一条数据会分为4个部分 第一部分占用一个字节是协议标记,用来标记是http协议还是自定义协议。 第二部分占用一个字节是序列化标记,用来确定我们的真实报文使用什么来进行序列化和反序列化。 第三部分占用四个字节,用来表示数据的字节长度,确定真实报文的长度。 第四部分长度不固定,是真实的传输数据。最终会通过第二部分将这些二进制数据转换成Java对象。
  以上就是我们定义的数据解析协议,通过上面的规则将二进制数据,转换成Java对象。
  读到这里你有没有一点收获呢?
  有没有发现,其实协议的概念,其实很简单,就是一个规则或者说是约定。能让彼此都互相认识的一个约定。
  在本系列中,我们会自定义一个协议,同时也会兼容支持http协议。如果感兴趣,就跟着小编一起coding吧。 3.2 通信层架构设计
  前面说了,我们是站在巨人的肩膀上的,根据dubbo的设计思路和我们的目标,我们也来画一张图。
  我们的最终架构如上图。
  包  作用  serialize 序列化协议层,包含了多种序列化协议 codec 数据解码器和编码器的具体实现层  exchange API交换层,业务层API和通信层API交换数据的地方,负责将业务数据转换成二进制数据发送,也负责将二进制数据转换成业务数据返回 model 基础数据模型  business 提供给开发者用来实现业务的api api Fluent 风格的api, 这种风格的好处是不需要记住接下来的步骤和方法 3.3 工程结构
  为了符合前面我们定的目标,所以我们要有一个大的工程。
  项目名  职责  mojito-net 底层通信模块 mojito-rpc rpc模块  mojito-spring-boot-starter springboot自动化配置
  由此我们的项目诞生了。下一篇我们就开始手撸代码吧。 .  README.md  mojito-net      pom.xml      src          main              java              resources          test              java  mojito-rpc      pom.xml      src          main              java              resources          test              java  mojito-spring-boot-starter      pom.xml      src          main              java              resources          test              java  pom.xml

酒店的床上为什么放块布呢?真是不看不知道,保洁阿姨说出真相!对于外出旅游或者是出差的朋友们来说,为了方便都会去就近选择酒店居住,当打开酒店房门来到内部的时候,映入眼帘的就是酒店的大床。一些细心的朋友们发现,在酒店的床上通常都会铺着一块布,但越南旅游业考察团我们来把好吃好玩好逛的红河介绍给越南游客来源云南日报(考察团在蒙自过桥米线小镇)4月15日至17日,受蒙自红河阳光国际旅行社有限公司邀请,由越南旅游报纸电视台旅游公司等组成的旅行考察商团队自15日入境,对蒙自建水屏边河口酒泉市和青岛市,哪个城市的命名与酒有关?蚂蚁庄园今日答案酒泉市是中国甘肃省西北部的一个城市,拥有着独特的地理优势和灿烂的文化底蕴。这个城市以其独特的自然风光和丰富的文化遗产而闻名于世,同时也有着许多美誉。首先,酒泉市被誉为黄河上游屏障,啥是佩奇在这个世界上,还有人比你更疼你的孩子01隔辈的爱,有时候甚至比亲骨肉还要亲我们经常看到有人讴歌父爱和母爱,例如朱自清写的背影,冰心的纸船,老舍的我的母亲等等。但我们爷爷奶奶外公外婆,隔一辈的爱就比较少看到。很多人都以知识科普带你认识扁桃体的三度肿大小朋友发热了去看医生,必须的经历总有看一看孩子的嗓子这个项目,其中就包括看扁桃体是否发炎,是否有肿大。医学上把扁桃体肿大分为三度,今天小编就来教大家认识认识扁桃体,让家长们都学会分SCERTS教育模式的三大模块SCERTS教育模式的三大模块分别是社交沟通(SC)情绪调节(ER)及协作支援(TS)。其中社交沟通和情绪调节是指孤独症儿童在这两方面的发展,而协作支援则与互动过程中成人的参与和环专家并非迷信,为什么飞机飞过南海观音像时,都必须要绕一圈我国佛教的传入也是有很悠久的历史了,经过上千年的发展,形成极具中国特色之佛教。关于佛的神话故事也是非常多的,我国也有许多佛教信徒,在一些比较重要的日子也会去寺庙拜一下,祈祷平安。(海南环岛旅游公路东方段两栖动物通道主体完工新海南客户端南海网南国都市报4月18日消息(记者李绍远)18日,记者从海南环岛旅游公路东方段施工方获悉,该路段两栖动物通道主体已经完工。目前动物通道端头微小湿地生态护坡建造基本完成众神仙组团游洛阳,唐僧竟然牵手女儿国国王?洛阳这几天捅了神仙窝吗洛阳身边儿事近日,洛阳网友称自己在地铁上偶遇神仙组团下界游,真是像捅了神仙窝一样!一号是西天取经团,观音菩萨带着唐僧四司徒四人乘坐地铁。而且还带女儿国国王坐身绿度母女性的保护神绿度母是藏传佛教中的一位非常重要的女性护法神,她被认为具有保护救助赐福等多种功德,因此在很多寺庙中都有供奉绿度母的唐卡或佛像。被广泛供奉在许多寺庙和唐卡中。她代表着慈悲和智慧,可以建在峭壁上的石棺墓穴,距今已2500年,原因仍是未解之谜地处欧亚两大洲交汇处的土耳其,从古至今始终是多元文明碰撞融合的十字路口,古老的小亚细亚半岛孕育了无数辉煌的国度与悠久的民族,深沉优雅的爱琴海又赋予它舒适的气候与壮美的景致。蓝天白云
关于社保卡到期换卡的通知欢迎关注秦人社服务,了解最新社保动态关于社保卡到期换卡的通知各参保企业针对近期部分离退休人员社保卡到期需换卡事宜,现通知如下。现已使用社保卡领取养老金的离退休人员(社保卡卡面制卡日重磅!补贴政策或再度延长!电动知家消息,据路透社报道,目前国家工信部等多个部委,正与汽车制造商们就延长新能源汽车补贴问题进行会谈。目的是保持这个关键市场的增长。不过中国2023年延期的全部条款,包括补贴金额住建部财政部央行发布关于实施住房公积金阶段性支持政策的通知红星新闻网5月24日讯住房和城乡建设部财政部人民银行发布关于实施住房公积金阶段性支持政策的通知。为贯彻落实党中央国务院关于高效统筹疫情防控和经济社会发展的决策部署,进一步加大住房公房子库存10年消化不完,为何年轻人不买房了?非常不理解为何房子卖不动了?需要买房的人口并未发生减少啊?根据国家统计局最新数据,截至今年4月末,全国商品房待售面积5。57亿平方米,同比增长8。4,相比2021年末增长了4700文案来了,请接收然而人生辽阔,眼里不应该都是爱与被爱。成长是一辈子的功课。不计后果的那一段,叫青春。我想与你闲坐庭前观花落执手相叙情与意当你被消极的雨水包围时,别忘了带上一把自信的雨伞。道别时,我人民日报金句摘抄2022年5月25日1下好先手棋,打好主动仗。2善立者顺势而成焉。3只有理想不灭信念不倒精神不垮,才能经得起风浪抵得住诱惑。4心有所畏,方能言有所戒行有所止。5赶考没有终点,奋斗永无穷期。6山以险峻成百度地图从王海峰旗下剥离,与汽车业务合并,资深副总裁李震宇分管范围扩大雷峰网5月24日下午消息,据36氪报道,百度地图业务已经从百度CTO王海峰旗下剥离,调整至百度IDG(智能智能驾驶)事业群。消息人士透露,百度地图有十多个子业务,员工规模近千人,几中国大商超大面积溃退,对澳洲的启示电商席卷中国,起初大商超不屑一顾,直到今天沃尔玛,家乐福,乐购,华联,等等大商超大面积倒闭。同时因为大商超,对购物中心的引流效果越来越差,购物中心,商业地产房东对大商超的租金暴涨,基因工程大突破!美国造出只需473个基因就能完美分裂的人造细胞一个具有完整功能的细胞至少需要多少个基因呢?显微镜下的JCVIsyn1。02010年,美国克莱格凡特研究所(J。CraigVenterInstitute,JCVI)的研究团队合成出房价重回2年前上一篇文章咱们讲到,即便现在楼市调控放松了不少,各地利好政策频出,但因为疫情的原因,大家对未来不太乐观,都在捂着口袋观望,所以这波政策的效果好不好还说不定。不过楼市需求这块其实还有女排奥运冠军赵蕊蕊运动生涯有遗憾,华丽转身后婚恋成父母心病点击关注,每天都有名人故事感动您!赵蕊蕊赵蕊蕊身高1。97米,曾是亚洲第一高度世界最佳副攻,夺得过2003年女排世界杯2004年雅典奥运会冠军。2008年北京奥运会,赵蕊蕊与队友们