真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

.NETCore微服務(wù)中的調(diào)用方式REST和RPC是什么意思

本篇文章為大家展示了.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司的客戶來(lái)自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜?,從?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。專業(yè)領(lǐng)域包括網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、電商網(wǎng)站開(kāi)發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開(kāi)發(fā)。

一、REST or RPC ?

1.1 REST & RPC

微服務(wù)之間的接口調(diào)用通常包含兩個(gè)部分,序列化和通信協(xié)議。常見(jiàn)的序列化協(xié)議包括json、xml、hession、protobuf、thrift、text、bytes等;通信比較流行的是http、soap、websockect,RPC通?;赥CP實(shí)現(xiàn),常用框架例如dubbo,netty、mina、thrift。

REST:嚴(yán)格意義上說(shuō)接口很規(guī)范,操作對(duì)象即為資源,對(duì)資源的四種操作(post、get、put、delete),并且參數(shù)都放在URL上,但是不嚴(yán)格的說(shuō)Http+json、Http+xml,常見(jiàn)的http api都可以稱為Rest接口。

RPC:即我們常說(shuō)的遠(yuǎn)程過(guò)程調(diào)用,就是像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法,通信協(xié)議大多采用二進(jìn)制方式。

1.2 HTTP vs 高性能二進(jìn)制協(xié)議

HTTP相對(duì)更規(guī)范,更標(biāo)準(zhǔn),更通用,無(wú)論哪種語(yǔ)言都支持HTTP協(xié)議。如果你是對(duì)外開(kāi)放API,例如開(kāi)放平臺(tái),外部的編程語(yǔ)言多種多樣,你無(wú)法拒絕對(duì)每種語(yǔ)言的支持,相應(yīng)的,如果采用HTTP,無(wú)疑在你實(shí)現(xiàn)SDK之前,支持了所有語(yǔ)言,所以,現(xiàn)在開(kāi)源中間件,基本最先支持的幾個(gè)協(xié)議都包含RESTful。

RPC協(xié)議性能要高的多,例如Protobuf、Thrift、Kyro等,(如果算上序列化)吞吐量大概能達(dá)到http的二倍。響應(yīng)時(shí)間也更為出色。千萬(wàn)不要小看這點(diǎn)性能損耗,公認(rèn)的,微服務(wù)做的比較好的,例如,netflix、阿里,曾經(jīng)都傳出過(guò)為了提升性能而合并服務(wù)。如果是交付型的項(xiàng)目,性能更為重要,因?yàn)槟阗u給客戶往往靠的就是性能上微弱的優(yōu)勢(shì)。

所以,最佳實(shí)踐一般是對(duì)外REST,對(duì)內(nèi)RPC,但是追求極致的性能會(huì)消耗很多額外的成本,所以一般情況下對(duì)內(nèi)一般也REST,但對(duì)于個(gè)別性能要求較高的接口使用RPC。

二、案例結(jié)構(gòu)

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

這里假設(shè)有兩個(gè)服務(wù),一個(gè)ClinetService和一個(gè)PaymentService,其中PaymentService有兩部分,一部分是基于REST風(fēng)格的WebApi部分,它主要是負(fù)責(zé)一些對(duì)性能沒(méi)有要求的查詢服務(wù),另一部分是基于TCP的RPC Server,它主要是負(fù)責(zé)一些對(duì)性能要求高的服務(wù),比如支付和支出等涉及到錢的接口。假設(shè)User在消費(fèi)ClientService時(shí)需要調(diào)用PaymentService根據(jù)客戶賬戶獲取Payment History(走REST)以及進(jìn)行交易事務(wù)操作(走RPC)。

三、REST調(diào)用

3.1 一個(gè)好用的REST Client : WebApiClient

使用過(guò)Java Feign Client的人都知道,一個(gè)好的聲明式REST客戶端可以幫我們省不少力。在.NET下,園子里的大大老九就寫(xiě)了一款類似于Feign Client的REST Client:WebApiClient。WebApiClient是開(kāi)源在github上的一個(gè)httpClient客戶端庫(kù),內(nèi)部基于HttpClient開(kāi)發(fā),是一個(gè)只需要定義C#接口(interface),并打上相關(guān)特性,即可異步調(diào)用http-api的框架 ,支持.net framework4.5+、netcoreapp2.0和netstandard2.0。它的GitHub地址是:https://github.com/dotnetcore/WebApiClient

如何安裝?

NuGet>Install-Package WebApiClient-JIT

3.2 使用實(shí)例:走API Gateway

Step1.定義HTTP接口

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

這里需要注意的是,由于我們要走API網(wǎng)關(guān),所以這里定義的HttpHost地址是一個(gè)假的,后面具體調(diào)用時(shí)會(huì)覆蓋掉,但是這里必須寫(xiě)上一個(gè),不然無(wú)法使用。

Step2.在Controller中即可異步調(diào)用

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

這里PaymentService的實(shí)現(xiàn)很簡(jiǎn)單,就是返回了一個(gè)String集合:

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

最終調(diào)用結(jié)果如下:

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

3.3 使用實(shí)例:直接訪問(wèn)具體服務(wù)

在服務(wù)眾多,且單個(gè)服務(wù)就部署了多個(gè)實(shí)例的情況下,我們可以通過(guò)API網(wǎng)關(guān)進(jìn)行中轉(zhuǎn),但是當(dāng)部分場(chǎng)景我們不需要通過(guò)API網(wǎng)關(guān)進(jìn)行中轉(zhuǎn)的時(shí)候,比如:性能要求較高,負(fù)載壓力較小單個(gè)實(shí)例足夠等,我們可以直接與要通信的服務(wù)進(jìn)行聯(lián)接,也就不用從API網(wǎng)關(guān)繞一圈。

Step1.改一下HTTP接口:

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

同理,這里的HttpHost也是后面需要被覆蓋的,原因是我們將其配置到了配置文件中。

Step2.改一下調(diào)用代碼:

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

最終調(diào)用結(jié)果如下:

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

四、RPC調(diào)用

4.1 Thrift簡(jiǎn)介

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

Thrift是一個(gè)軟件框架,用來(lái)進(jìn)行可擴(kuò)展且跨語(yǔ)言的服務(wù)的開(kāi)發(fā)。它結(jié)合了功能強(qiáng)大的軟件堆棧和代碼生成引擎,以構(gòu)建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 這些編程語(yǔ)言間無(wú)縫結(jié)合的、高效的服務(wù)。

當(dāng)然,還有g(shù)RPC也可以選擇,不過(guò)從網(wǎng)上的性能測(cè)試來(lái)看,Thrift性能應(yīng)該優(yōu)于gRPC 2倍以上,但是gRPC的文檔方面要比Thrift友好很多。

4.2 Thrift的使用

(1)下載Thrift (這里選擇Windows版)

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

下載完成后解壓,這里我將其改名為thrift.exe(去掉了版本號(hào)),一會(huì)在命令行敲起來(lái)更方便一點(diǎn)。

(2)編寫(xiě)一個(gè)PaymentService.thrift,這是一個(gè)IDL中間語(yǔ)言

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

(3)根據(jù)thrift語(yǔ)法規(guī)則生成C#代碼

cmd>thrift.exe -gen csharp PaymentService.thrift

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

(4)創(chuàng)建一個(gè)Contracts類庫(kù)項(xiàng)目,將生成的C#代碼放進(jìn)去

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

4.3 增加RPC Server

(1)新增一個(gè)控制臺(tái)項(xiàng)目,作為我們的Payment Service RPC Server,并引用Contracts類庫(kù)項(xiàng)目

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

(2)引入thrift-netcore包:

NuGet>Install-Package apache-thrift-netcore

(3)加入一個(gè)新增的PaymentService實(shí)現(xiàn)類

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

這里輸出日志僅僅是為了測(cè)試。

(4)編寫(xiě)啟動(dòng)RPC Server的主程序

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

(5)如果是多個(gè)服務(wù)實(shí)現(xiàn)的話,也可以如下這樣啟動(dòng):

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

4.4 調(diào)用RPC

在ClientService中也引入apache-thrift-netcore包,然后在調(diào)用的地方修改如下:

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

最終測(cè)試結(jié)果如下:

.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思

上述內(nèi)容就是.NET Core微服務(wù)中的調(diào)用方式REST和RPC是什么意思,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章標(biāo)題:.NETCore微服務(wù)中的調(diào)用方式REST和RPC是什么意思
文章網(wǎng)址:http://weahome.cn/article/ggdjpi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部