日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core微服务之服务间的调用方式(REST and RPC)

發(fā)布時間:2023/12/4 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core微服务之服务间的调用方式(REST and RPC) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、REST or RPC ?

1.1 REST & RPC

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

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

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

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

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

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

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

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

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

三、REST調(diào)用

3.1 一個好用的REST Client : WebApiClient

  使用過Java Feign Client的人都知道,一個好的聲明式REST客戶端可以幫我們省不少力。在.NET下,園子里的大大老九就寫了一款類似于Feign Client的REST Client:WebApiClient。WebApiClient是開源在github上的一個httpClient客戶端庫,內(nèi)部基于HttpClient開發(fā),是一個只需要定義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 使用實例:走API Gateway

  Step1.定義HTTP接口

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

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

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

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

  

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

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

  Step1.改一下HTTP接口:

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

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

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

  

四、RPC調(diào)用

4.1 Thrift簡介

  

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

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

4.2 Thrift的使用

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

  

  下載完成后解壓,這里我將其改名為thrift.exe(去掉了版本號),一會在命令行敲起來更方便一點。

  (2)編寫一個PaymentService.thrift,這是一個IDL中間語言

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

cmd>thrift.exe -gen csharp PaymentService.thrift

  

  (4)創(chuàng)建一個Contracts類庫項目,將生成的C#代碼放進去

  

4.3 增加RPC Server

  (1)新增一個控制臺項目,作為我們的Payment Service RPC Server,并引用Contracts類庫項目

  

  (2)引入thrift-netcore包:

NuGet>Install-Package apache-thrift-netcore

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

  這里輸出日志僅僅是為了測試。

  (4)編寫啟動RPC Server的主程序

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

4.4 調(diào)用RPC

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

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

  

五、小結(jié)

  本篇簡單的介紹了下微服務(wù)架構(gòu)下服務(wù)之間調(diào)用的兩種常用方式:REST與RPC,另外前面介紹的基于消息隊列的發(fā)布/訂閱模式也是服務(wù)通信的方式之一。本篇基于WebApiClient這個開源庫介紹了如何進行聲明式的REST調(diào)用,以及Thrift這個RPC框架介紹了如何進行RPC的通信,最后通過一個小例子來結(jié)尾。最后,服務(wù)調(diào)用的最佳實踐一般是對外REST,對內(nèi)RPC,但是追求極致的性能會消耗很多額外的成本,所以一般情況下對內(nèi)一般也REST,但對于個別性能要求較高的接口使用RPC。

參考資料

遠(yuǎn)方的行者,《微服務(wù) RPC和REST》

楊中科,《.NET Core微服務(wù)課程:Thrift高效通訊》

醉眼識朦朧,《Thrift入門初探--thrift安裝及java入門實例》

focus-lei,《.net core下使用Thrift》

寶哥在路上,《Thrift性能測試與分析》

原文地址:

https://www.cnblogs.com/edisonchou/p/microservice_communication_rest_and_rpc_foundation.html

.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的.NET Core微服务之服务间的调用方式(REST and RPC)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本公妇乱淫免费视频一区三区 | www.香蕉.com | 亚洲精品久久久久久久久久久 | 国产精品一区二区欧美 | 欧美一级在线免费观看 | 欧美国产精品一区 | 邻居交换做爰2 | 中文字幕第十一页 | 国产特级视频 | 开心色站 | 亚洲成在人 | 色av一区 | 青青青视频免费观看 | 91婷婷射 | 国产精品一区在线 | 亚洲最大成人av | 久久精品亚洲一区 | 欧洲色网站 | 免费播放av| 91精品一区二区 | 男女裸体无遮挡做爰 | av片久久| 免费在线观看的av | 亚洲人高潮女人毛茸茸 | 日韩欧| av片在线观看 | 国产超碰人人 | 水多多在线 | 欧美日韩人妻一区二区 | 成人h片在线观看 | 色综合一区二区 | 一区二区三区四区在线 | 精精国产xxxx视频在线 | 亚洲网站免费 | 日本一二三视频 | 精品久久久久久久久久久久久久 | 婷婷成人综合网 | 无码人妻一区二区三区精品视频 | 麻豆日产六区 | 奇米中文字幕 | 嫩草在线观看视频 | 日本日韩欧美 | 私人av | 精品人妻一区二区三区视频 | 天天操,夜夜操 | 欧美一级α片 | 午夜激情网址 | 欧美激情五月 | 2021天天干 | 亚洲综合性| 国产黄a三级三级看三级 | av福利在线免费观看 | 中文在线a√在线 | 国产伦精品一区二区三区视频我 | 国产精品VideoSex性欧美 | 天天干天天天 | 亚洲一区不卡在线 | 久久久亚洲欧洲 | 性xxx法国hd极品 | 亚洲人人精品 | 来吧亚洲综合网 | 丰满人妻综合一区二区三区 | 91抖音成人 | 欧美日韩午夜爽爽 | 在线观看网站 | 女人18片毛片60分钟 | 精品久久人人 | 最近免费中文字幕大全免费版视频 | 岛国大片在线免费观看 | 日韩一区在线播放 | 夜夜操夜夜干 | 岛国精品在线播放 | 精品国产一二区 | 日本一区二区久久 | 四虎黄色网 | 国产ts在线观看 | 亚洲国产精品久 | 亚洲精品aaaaa | 欧美日韩三 | 黄页嫩草 | 丁香六月色 | av色图 | 日韩中文在线视频 | 超碰人人网 | 在线观看国产91 | 免费成人在线视频观看 | 国产在线v | 黄色大片aa| www.xxxx欧美 | 97香蕉碰碰人妻国产欧美 | 大尺度在线观看 | 久久久美女视频 | 秋霞视频在线观看 | 久久99热久久99精品 | 国产精品久久久久久久久久久久久久久久久久 | 国内精品久久久久久久久久久 | 中文字幕超清在线免费观看 | 免费大片黄在线观看 | 欧美久久伊人 |