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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【.NET Core项目实战-统一认证平台】第十六章 网关篇-Ocelot集成RPC服务

發布時間:2023/12/4 asp.net 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【.NET Core项目实战-统一认证平台】第十六章 网关篇-Ocelot集成RPC服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是RPC

RPC是“遠程調用(Remote Procedure Call)”的一個名稱的縮寫,并不是任何規范化的協議,也不是大眾都認知的協議標準,我們更多時候使用時都是創建的自定義化(例如Socket,Netty)的消息方式進行調用,相比http協議,我們省掉了不少http中無用的消息內容。因此很多系統內部調用仍然采用自定義化的RPC調用模式進行通信,畢竟速度和性能是內網的關鍵指標之一,而標準化和語義無關性在外網中舉足輕重。所以,為何API網關無法工作在RPC上,因為它沒有一個像HTTP/HTTPS那樣的通用標準。

二、CzarRpc簡介

CzarRpc是作者基于Dotnetty實現的RPC通訊框架,參考了Surging和Tars.Net優秀設計,目前正在內部使用中,下面就CzarRpc調用方式做一個簡單介紹,測試結構如下:

1、服務接口

新建一個Czar.Rpc.Common類庫,首先需要引用Czar.RpcNuget包。

然后定義測試接口IHelloRpc.cs,也是目前支持的調用方式。

2.服務端

新建一個控制臺程序Czar.Rpc.Server,然后實現服務接口,因為都是測試數據,所以就隨意實現了方法。

HelloRpcServer.cs

然后啟動服務端監聽。

啟用外部使用CzarConfig.json的配置文件,注意需要設置成始終復制。

到此服務器端搭載完成。

3、客戶端

新建客戶端控制臺程序Czar.Rpc.Client,然后配置Rpc調用信息。

現在開始啟用客戶端信息。

現在整個RPC調用搭建完畢,然后分別啟動服務器端和客戶端,就可以看到屏幕輸出內容如下。

客戶端輸出:

服務器端輸出:

至此整個CzarRpc的基本使用已經介紹完畢,感興趣的朋友可以自行測試。

三、Ocelot增加RPC支持

有了CzarRpc的通訊框架后,現在在Ocelot上實現Rpc功能簡直易如反掌,現在開始添加我們的Rpc中間件,也讓我們擴展的網關靈活起來。

還記得我介紹網關篇時添加中間件的步驟嗎?如果不記得的可以先回去回顧下。

首先如何讓網關知道這個后端調用是http還是Rpc呢?這時應該會想到Ocelot路由配置里的DownstreamScheme,可以在這里判斷我們定義的是http還是rpc即可。同時我們希望之前定義的所有中間件都生效,最后一步請求時如果配置下端路由rpc,使用rpc調用,否則使用http調用,這樣可以重復利用之前所有的中間件功能,減少重復開發。

在之前的開發的自定義限流和自定義授權中間件開發中,我們知道開發完的中間件放到哪里使用,這里就不介紹原理了,直接添加到BuildCzarOcelotPipeline里如下代碼。

這里是在最后請求前判斷使用的下游請求方式,如果DownstreamScheme使用的rpc,就使用rpc中間件處理。

Rpc處理的完整邏輯是,如何從http請求中獲取想要解析的參數,這里需要設置匹配的優先級,目前設計的優先級為。

1、首先提取路由參數,如果匹配上就是用路由參數名稱為key,值為value,按順序組成第一批參數。

2、提取query參數,如有有值按順序組成第二批參數。

3、如果非Get請求,提取body內容,如果非空,組成第三批參數

4、從配置庫里提取rpc路由調用的服務名稱和函數名稱,以及是否單向調用。

5、按照獲取的數據進行rpc調用并等待返回。

看了上面的設計是不是思路很清晰了呢?

1、rpc路由表設計


2、提取遠程調用方法

根據上游路由獲取遠程調用的配置項目


3、重寫返回結果

由于rpc調用后是返回的Json封裝的信息,需要解析成對應的HttpContent。

4、rpc中間件邏輯處理

有了前面的準備信息,現在基本可以完成邏輯代碼的開發了,詳細的中間件代碼如下。


5、啟動Rpc客戶端配置

目前Rpc的客戶端配置我們還沒啟動,只需要在AddCzarOcelot中添加相關注入即可。

6、配置客戶端

最后別忘了配置Rpc客戶端信息是否啟用證書信息,為了配置信息的內容。

現在讓網關集成Rpc功能全部配置完畢。

四、網關Rpc功能測試

本次測試我在原有的網關基礎上,增加不同類型的Rpc調用,就按照不同維度測試Rpc調用功能,本次測試案例是建立在Czar.Rpc 服務端基礎上,正好可以測試。

1、測試路由參數

請求路徑/hello/{no}/{name},調用的服務端方法Hello,傳入的兩個參數分別是no ,name。

可以在服務器端添加斷點調試,發現確實接收到請求信息,并正常返回,下面是PostMan測試結果。

2、使用Query方式傳遞參數

請求路徑/rpc/query,調用的服務端方法還是Hello,參數分別是no ,name。

3、使用Post方式傳遞Json

請求路徑/rpc/body,調用的服務器方法是HelloSendModel。

4、混合參數使用

請求的路徑/rpc/bodyparm/{name},調用的服務器端方法是HelloSendModelParm。

所有的返回結果可自行調試測試,發現都能達到預期結果。

同時此網關還是支持默認的http請求的,這里就不一一測試了。

五、總結

本篇我介紹了什么是Rpc,以及Czar.Rpc的基本使用,然后使用Czar.Rpc框架集成到我們基于Ocelot擴展網關中,并實現了不能方式的Rpc調用,可以在幾乎不改變現有流程的情況下很快速的集成進去,這也是Ocelot開發框架的魅力所在。

如果在使用過程中有什么問題或建議,可以在.NET Core項目實戰交流群(637326624)中聯系作者。

最后本文涉及的所有的源代碼可在https://github.com/jinyancao/czar.gateway中下載預覽。


創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【.NET Core项目实战-统一认证平台】第十六章 网关篇-Ocelot集成RPC服务的全部內容,希望文章能夠幫你解決所遇到的問題。

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