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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/21 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现远程调用_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2.遠程調用方式

無論是微服務還是SOA,都面臨著服務間的遠程調用。那么服務間的遠程調用方式有哪些呢?

常見的遠程調用方式有以下幾種:

  • RPC:Remote Produce Call遠程過程調用,類似的還有RMI。自定義數據格式,基于原生TCP通信,速度快,效率高。早期的webservice,現在熱門的dubbo,都是RPC的典型
  • Http:http其實是一種網絡傳輸協議,基于TCP,規定了數據傳輸的格式。現在客戶端瀏覽器與服務端通信基本都是采用Http協議。也可以用來進行遠程服務調用。缺點是消息封裝臃腫。
  • 現在熱門的Rest風格,就可以通過http協議來實現。

2.1.認識RPC

RPC,即 Remote Procedure Call(遠程過程調用),是一個計算機通信協議。 該協議允許運行于一臺計算機的程序調用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程。說得通俗一點就是:A計算機提供一個服務,B計算機可以像調用本地服務那樣調用A計算機的服務。

通過上面的概念,我們可以知道,實現RPC主要是做到兩點:

  • 實現遠程調用其他計算機的服務
  • 要實現遠程調用,肯定是通過網絡傳輸數據。A程序提供服務,B程序通過網絡將請求參數傳遞給A,A本地執行后得到結果,再將結果返回給B程序。這里需要關注的有兩點:
  • 1)采用何種網絡通訊協議?
  • 現在比較流行的RPC框架,都會采用TCP作為底層傳輸協議
  • 2)數據傳輸的格式怎樣?
  • 兩個程序進行通訊,必須約定好數據傳輸格式。就好比兩個人聊天,要用同一種語言,否則無法溝通。所以,我們必須定義好請求和響應的格式。另外,數據在網路中傳輸需要進行序列化,所以還需要約定統一的序列化的方式。
  • 像調用本地服務一樣調用遠程服務
  • 如果僅僅是遠程調用,還不算是RPC,因為RPC強調的是過程調用,調用的過程對用戶而言是應該是透明的,用戶不應該關心調用的細節,可以像調用本地服務一樣調用遠程服務。所以RPC一定要對調用的過程進行封裝

RPC調用流程圖:

想要了解詳細的RPC實現,給大家推薦一篇文章:自己動手實現RPChttps://legacy.gitbook.com/book/huge0612/tour-of-rpc/details

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客戶端工具,能夠幫助我們做這些事情,例如:

  • HttpClient
  • OKHttp
  • URLConnection

接下來,我們就一起了解一款比較流行的客戶端工具:HttpClient

3.1.HttpClient

3.1.1.介紹

HttpClient是Apache公司的產品,是Http Components下的一個組件。

官網地址:http://hc.apache.org/index.html

特點:

  • 基于標準、純凈的Java語言。實現了Http1.0和Http1.1
  • 以可擴展的面向對象的結構實現了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)
  • 支持HTTPS協議。
  • 通過Http代理建立透明的連接。
  • 自動處理Set-Cookie中的Cookie。

發起get請求:

@Testpublic void testGet() throws IOException {HttpGet request = new HttpGet("http://www.baidu.com");String response = this.httpClient.execute(request, new BasicResponseHandler());System.out.println(response);}

發起Post請求:

@Testpublic void testPost() throws IOException {HttpPost request = new HttpPost("http://www.oschina.net/");request.setHeader("User-Agent

總結

以上是生活随笔為你收集整理的实现远程调用_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。