游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

微服务的那些事(三),微服务的远程调用方式。RPC和HTTP

  2。远程调用方式
  无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?
  常见的远程调用方式有以下几种:RPC:RemoteProduceCall远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。缺点是消息封装臃肿。现在热门的Rest风格,就可以通过http协议来实现。
  2。1。认识RPC
  RPC,即RemoteProcedureCall(远程过程调用),是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。说得通俗一点就是:A计算机提供一个服务,B计算机可以像调用本地服务那样调用A计算机的服务。
  通过上面的概念,我们可以知道,实现RPC主要是做到两点:实现远程调用其他计算机的服务要实现远程调用,肯定是通过网络传输数据。A程序提供服务,B程序通过网络将请求参数传递给A,A本地执行后得到结果,再将结果返回给B程序。这里需要关注的有两点:1)采用何种网络通讯协议?现在比较流行的RPC框架,都会采用TCP作为底层传输协议2)数据传输的格式怎样?两个程序进行通讯,必须约定好数据传输格式。就好比两个人聊天,要用同一种语言,否则无法沟通。所以,我们必须定义好请求和响应的格式。另外,数据在网路中传输需要进行序列化,所以还需要约定统一的序列化的方式。像调用本地服务一样调用远程服务如果仅仅是远程调用,还不算是RPC,因为RPC强调的是过程调用,调用的过程对用户而言是应该是透明的,用户不应该关心调用的细节,可以像调用本地服务一样调用远程服务。所以RPC一定要对调用的过程进行封装
  RPC调用流程图:
  想要了解详细的RPC实现,给大家推荐一篇文章:自己动手实现RPChttps:legacy。gitbook。combookhuge0612tourofrpcdetails
  2。2。认识Http
  Http协议:超文本传输协议,是一种应用层协议。规定了网络传输的请求格式、响应格式、资源定位和操作的方式等。但是底层采用什么网络传输协议,并没有规定,不过现在都是采用TCP协议作为底层传输协议。说到这里,大家可能觉得,Http与RPC的远程调用非常像,都是按照某种规定好的数据格式进行网络通信,有请求,有响应。没错,在这点来看,两者非常相似,但是还是有一些细微差别。RPC并没有规定数据传输格式,这个格式可以任意指定,不同的RPC协议,数据格式不一定相同。Http中还定义了资源定位的路径,RPC中并不需要最重要的一点:RPC需要满足像调用本地服务一样调用远程服务,也就是对调用过程在API层面进行封装。Http协议没有这样的要求,因此请求、响应等细节需要我们自己去实现。优点:RPC方式更加透明,对用户更方便。Http方式更灵活,没有规定API和语言,跨语言、跨平台缺点:RPC方式需要在API层面进行封装,限制了开发的语言环境。
  例如我们通过浏览器访问网站,就是通过Http协议。只不过浏览器把请求封装,发起请求以及接收响应,解析响应的事情都帮我们做了。如果是不通过浏览器,那么这些事情都需要自己去完成。
  2。3。如何选择?
  既然两种方式都可以实现远程调用,我们该如何选择呢?速度来看,RPC要比http更快,虽然底层都是TCP,但是http协议的信息往往比较臃肿,不过可以采用gzip压缩。难度来看,RPC实现较为复杂,http相对比较简单灵活性来看,http更胜一筹,因为它不关心实现细节,跨平台、跨语言。
  因此,两者都有不同的使用场景:如果对效率要求更高,并且开发过程使用统一的技术栈,那么用RPC还是不错的。如果需要更加灵活,跨语言、跨平台,显然http更合适
  那么我们该怎么选择呢?
  微服务,更加强调的是独立、自治、灵活。而RPC方式的限制较多,因此微服务框架中,一般都会采用基于Http的Rest风格服务。3。Http客户端工具
  既然微服务选择了Http,那么我们就需要考虑自己来实现对请求和响应的处理。不过开源世界已经有很多的http客户端工具,能够帮助我们做这些事情,例如:HttpClientOKHttpURLConnection
  接下来,我们就一起了解一款比较流行的客户端工具:HttpClient
  3。1。HttpClient
  3。1。1。介绍
  HttpClient是Apache公司的产品,是HttpComponents下的一个组件。
  官网地址:http:hc。apache。orgindex。html
  特点:基于标准、纯净的Java语言。实现了Http1。0和Http1。1以可扩展的面向对象的结构实现了Http全部的方法(GET,POST,PUT,DELETE,HEAD,OPTIONS,andTRACE)支持HTTPS协议。通过Http代理建立透明的连接。自动处理SetCookie中的Cookie。
  发起get请求:TestpublicvoidtestGet()throwsIOException{HttpGetrequestnewHttpGet(http:www。baidu。com);Stringresponsethis。httpClient。execute(request,newBasicResponseHandler());System。out。println(response);}
  发起Post请求:TestpublicvoidtestPost()throwsIOException{HttpPostrequestnewHttpPost(http:www。oschina。net);request。setHeader(UserAgent,Mozilla5。0(WindowsNT10。0;WOW64)AppleWebKit537。36(KHTML,likeGecko)Chrome56。0。2924。87Safari537。36);Stringresponsethis。httpClient。execute(request,newBasicResponseHandler());System。out。println(response);}
  尝试访问接口:http:localhosthello
  这个接口返回一个User对象TestpublicvoidtestGetPojo()throwsIOException{HttpGetrequestnewHttpGet(http:localhosthello);Stringresponsethis。httpClient。execute(request,newBasicResponseHandler());System。out。println(response);}
  我们实际得到的是一个json字符串:{id:8,userName:liurushi,password:123456,name:柳如是,age:21,sex:2,birthday:19950807T16:00:00。0000000,created:20140920T03:41:15。0000000,updated:20140920T03:41:15。0000000,note:柳如是在秦淮河演奏琵琶}
  如果想要得到对象,我们还需要手动进行Json反序列化,这一点比较麻烦。
  3。1。3。Json转换工具
  HttpClient请求数据后是json字符串,需要我们自己把Json字符串反序列化为对象,我们会使用JacksonJson工具来实现。
  JacksonJson是SpringMVC内置的json处理工具,其中有一个ObjectMapper类,可以方便的实现对json的处理:
  对象转json
  json处理工具privateObjectMappermappernewObjectMapper();TestpublicvoidtestJson()throwsJsonProcessingException{UserusernewUser();user。setId(8L);user。setAge(21);user。setName(柳如是);user。setUserName(liurushi);序列化Stringjsonmapper。writeValueAsString(user);System。out。println(jsonjson);}
  结果。
  json转普通对象
  json处理工具privateObjectMappermappernewObjectMapper();TestpublicvoidtestJson()throwsIOException{UserusernewUser();user。setId(8L);user。setAge(21);user。setName(柳岩);user。setUserName(liuyan);序列化Stringjsonmapper。writeValueAsString(user);反序列化,接收两个参数:json数据,反序列化的目标类字节码Userresultmapper。readValue(json,User。class);System。out。println(resultresult);}
  结果:
  json转集合
  json转集合比较麻烦,因为你无法同时把集合的class和元素的class同时传递到一个参数。
  因此Jackson做了一个类型工厂,用来解决这个问题:
  json处理工具privateObjectMappermappernewObjectMapper();TestpublicvoidtestJson()throwsIOException{UserusernewUser();user。setId(8L);user。setAge(21);user。setName(柳岩);user。setUserName(liuyan);序列化,得到对象集合的json字符串Stringjsonmapper。writeValueAsString(Arrays。asList(user,user));反序列化,接收两个参数:json数据,反序列化的目标类字节码Listusersmapper。readValue(json,mapper。getTypeFactory()。constructCollectionType(List。class,User。class));for(Useru:users){System。out。println(uu);}}
  结果。
  json转任意复杂类型
  当对象泛型关系复杂时,类型工厂也不好使了。这个时候Jackson提供了TypeReference来接收类型泛型,然后底层通过反射来获取泛型上的具体类型。实现数据转换。
  json处理工具privateObjectMappermappernewObjectMapper();TestpublicvoidtestJson()throwsIOException{UserusernewUser();user。setId(8L);user。setAge(21);user。setName(柳岩);user。setUserName(liuyan);
  序列化,得到对象集合的json字符串
  Stringjsonmapper。writeValueAsString(Arrays。asList(user,user));
  反序列化,接收两个参数:json数据,反序列化的目标类字节码Listusersmapper。readValue(json,newTypeReferenceListUser(){});for(Useru:users){System。out。println(uu);}}
  3。3。Spring的RestTemplate
  Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便。RestTemplate并没有限定Http的客户端类型,而是进行了抽象,目前常用的3种都有支持:HttpClientOkHttpJDK原生的URLConnection(默认的)
  首先在项目中注册一个RestTemplate对象,可以在启动类位置注册:SpringBootApplicationpublicclassHttpDemoApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(HttpDemoApplication。class,args);}BeanpublicRestTemplaterestTemplate(){默认的RestTemplate,底层是走JDK的URLConnection方式。returnnewRestTemplate();}}在测试类中直接Autowired注入:RunWith(SpringRunner。class)SpringBootTest(classesHttpDemoApplication。class)publicclassHttpDemoApplicationTests{AutowiredprivateRestTemplaterestTemplate;TestpublicvoidhttpGet(){Useruserthis。restTemplate。getForObject(http:localhosthello,User。class);System。out。println(user);}}通过RestTemplate的getForObject()方法,传递url地址及实体类的字节码,RestTemplate会自动发起请求,接收响应,并且帮我们对响应结果进行反序列化。题记
  微服务的相关的博文,我会将持续的更新下去。我们将陆续写出springCloud的各个组件的用法。你们觉得我写文章对你有帮助。请关注我,你的关注,是我持续创作的动力。

当前显卡涨价太离谱了!给大家推荐几款值得入手的过渡显卡由于虚拟币持续高涨,矿老板纷纷入坑,导致了显卡涨价太涨,完全没有停下的意思,如果有朋友着急想配电脑的,劝你不要等了显卡价格一时半会降不下来的,听我的建议先用一个二手显卡或是入门……你迟到的许多年沐建峰研发取得进展华耀厂却将被收购星关系10月24日讯沐建峰(黄晓明饰)民间借贷用于华耀厂资金投入,研发取得新进展众人欣喜不已。不料,外资企业瑞克集团找上门,意欲收购华耀厂。网友纷纷表示求轻虐沐厂长沐建峰情场失……如何挑选机顶盒?这三大要点需注意阜新声艺视听电视盒子的好坏直接关系着观影体验,一台配置不好的盒子会让你遇上卡顿、死机等种种让人抓狂的情况。可是市面上的盒子那么多,该如何选购呢?下面就从系统、硬件配置、内存三个方面给……网剧迷雾追踪开机蒋勤勤周游携手共破谜案星关系9月27日讯由优酷视频出品,嘉本影业、公安部金盾影视文化中心联合出品,嘉本影视、星河创想承制的网剧《迷雾追踪》今日开机。该剧是由余庆自编自导,蒋勤勤、周游领衔主演,赵成顺……大男人的快乐电脑主机,X570暗影2080SPGF海妖Z73废话在前:在经历了那么长的一个春节假期后,咱们国人宅家的日子基本算是过去了,现在国内各行各业的复工貌似也已经是差不多了,能直观感受到的就是个人周边的快递物流时效基本已经是……东方卫视我们在行动继续前行蒋勤勤卖脐橙遭王耀庆砸场ALLIN星关系4月10日讯由斑马会员独家冠名的中国首档精准扶贫公益纪实节目东方卫视《我们在行动》第三季第三站接到来自明星心愿委托人蒋勤勤的邀请,公益大使陈蓉、王耀庆、ALLIN男团杨昊……奈雪PRO重磅发布,饮领千亿规模新式茶饮市场估值过百亿的奈雪,又给我们带来了新惊喜。12月3日,由新式茶饮头部品牌奈雪的茶主办的第二届饮领者峰会在上海举行。峰会现场,奈雪的茶联合CBNData发布了《2020新式茶……人民日报举行爱上特种兵看片会黄景瑜用心诠释青年力量近日,电视剧《爱上特种兵》联合人民日报数字传播在京举办以家国与你都是理想为主题的看片会,黄景瑜、李沁二位主演与剧集主创团队一齐现身,畅谈创作心得以及镜头背后的故事。电视剧……OnexPlayer惊艳2021ChinaJoy,解锁全新掌2021年7月30日至8月2日,一年一度的国内最大规模的游戏盛会2021ChinaJoy(第十九届中国国际数码互动娱乐展览会)在上海新国际博览中心隆重举行。本届ChinaJoy……疯犬冬日戏份杀青张宥浩主演张一白回归之作星关系1月29日讯日前,由张一白执导全新青春力作、改编自作家里则林同名青春小说的电视剧《疯犬少年的天空》宣布冬季戏份杀青并首发冬季海报,其余戏份将于夏季继续拍摄。故事讲述了老狗……惊蛰收官!王泷正细节演技获超高评价星关系11月19日讯由王泷正同张若昀、王鸥等人主演的谍战剧《谍战深海之惊蛰》已于昨晚圆满大结局。王泷正在剧中饰演荒木惟一角,霸气狠戾,因为到位的细节演技诠释,得到了一众好评。……出租直销牌照等问题引国家市场监督管理总局高度关注四家直销被日前,国家市场监督管理总局下发文件通知,文件显示,近期部分直销企业通过挂靠、转让股权、相互交叉持股等多种方式与其他企业合作,涉嫌变相转让直销经营许可证。为进一步规范直销市场,要……
海信x天猫超级品牌日震撼来袭,VIDAA电视当潮不让新年换新正当时,换上一年好运气!海信集团x天猫超级品牌日1月1315日即将登陆天猫商城。超品日碰上年货期,海信携手天猫组成海天CP,开启寻家环游记;邀你一起以AI为家,为新家加……数字驱动智慧领航,2018云栖新零售峰会,论实践,探未来9月21日,2018年云栖大会第三天,新零售峰会在云栖小镇盛大举办。本届峰会以新零售为主题,邀请了天猫、阿里零售通、淘宝、盒马、阿里供应链平台,吸引了来自零售、快消、电子、制造……AMD不稳定的认知到底怪谁?英特尔究竟有多厉害?提到英特尔这三个字,各位首先想到的是什么?一家独大连续好几年戏弄消费者的挤牙膏,永远的14nm加加加,还是一有风吹草动,就涨价的光荣传统,事实上,Intel是全球最大的个人计算……传统主业净利持续下滑云南能投拟再度加码风电项目谋突围财联社(成都,记者熊嘉楠)讯,转型风电刚刚两年的云南能投(002053。SZ)如今宣布将筹建大姚县涧水塘梁子风电场风电项目,再度加码风电项目。大姚县涧水塘梁子风电场项目也是继曲……理解交易中最值得信赖和可靠的理论之一威科夫交易法在传奇技术分析师的神殿中,或许没有人比理查德威科夫(RichardWyckoff)更高。威科夫在20世纪初观察市场时,首创了一种技术分析方法,至今仍被交易员广泛使用。威科夫理论……安装壁挂式广告机时需要留意哪些问题?液晶广告机就安装方式而言目前仅分为壁挂式液晶广告机和立式液晶广告机,立式广告机的安装。比较简单,只需要轻轻抬放到指定的位置、通上电即可使用。而壁挂式液晶广告机安装就相对复杂点,……全球变速箱质量最好的6大品牌,你知道几个?日本品牌占据两席作为汽车三大件之一的变速箱,在汽车工业的发展历程中有着举足轻重的地位。全球汽车品牌浩如烟海,但是变速箱的品牌却屈指可数,其中质量最好的6大品牌更是占据了市场八成以上的份额。你知……电路板焊接注意事项(一)看实物画电路图,关键是在看图,图看不明白,就无法作好图,中考有个内部规定,混联作图是不要求的,那么你心里应该明白实物图实际上只有两种电路,一种串联,另一种是并联,串联电路……一文带你了解自动驾驶传感器随着汽车电动化、智能化、网联化、共享化发展,自动驾驶的雏形也逐渐出现,虽然自动驾驶汽车还未完全商用化,但很多车企已经开始布局L3甚至L4级别的自动驾驶汽车。美国国家公路交通安全……290元英特尔神秘处理器一夜爆红!背后隐藏的故事有几人知道?290元的英特尔笔记本神U的文章,魔改君也写过很多了。但是之间都是购买于淘宝水晶家,配合魔改君自创的方法,用着很舒服,不需要工具,跟普通处理器安装方法完全一样,也有……高考延迟1个月,这次微信还是迟到了2020年不平凡的一年,就在昨日,国家通知高考延迟1个月。疫情之间社交APP的下载量一直稳定的微信却被钉钉超越,钉钉是阿里巴巴旗下的一个商务办公软件,这让马化腾万万没想到……如今AI有多强?软体机器人能钻进身体做手术,小爱还能隔空传话其实如今也有不少机器人运用于手术领域,之前就有能做骨科手术的机器人投入使用,但今天要说的同样已经投入手术中使用的软体机器人,着实让小编大为惊叹。据悉,最近来自哈佛大学和波……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网