前言:
今天補充一下 Taurus.MVC 微服務教程,介紹一下微服務中針對RPC方面調整或新增的功能。
之前系列文章目錄:
Taurus.MVC 微服務框架 入門開發教程:項目集成:1、服務端:註冊中心、網關(提供可運行程序下載)。
Taurus.MVC 微服務框架 入門開發教程:項目集成:2、客戶端:ASP.NET Core(C#)項目集成:應用中心。
Taurus.MVC 微服務框架 入門開發教程:項目集成:3、客戶端:其它編程語言項目集成:Java集成應用中心。
Taurus.MVC 微服務框架 入門開發教程:項目集成:4、默認安全認證與自定義安全認證。
Taurus.MVC 微服務框架 入門開發教程:項目集成:5、統一的日誌管理。
Taurus.MVC 微服務框架 入門開發教程:項目集成:6、微服務間的調用方式:Rpc.StartTaskAsync。
在當前版本的 Taurus.MVC 中,變更了 Rpc 的調用方式,同時引入了微服務間調用的程序集生成下載,或代碼引用。
下面一起看看相關的介紹。
1、Taurus.MVC 微服務 Rpc 的調用方式變更說明:
A、名稱空間變更:
Rpc 相關功能,從微服務 Taurus.MicroService 名稱空間變更到 Taurus.Plugin.Rpc 名稱空間下。
B、調用方式變更:
調用方式:從Rpc.XXXAsync 變更爲:Rest.XXXAsync 系列,起手勢有點小變,方法不變。
C、增加同步調用方法:
例如:
方法:Rest.StartTaskAsync(......) 對應異步
方法:Rest.StartTask(......) 對應同步
下面是一個使用示例:
public void Start() { string postUrl = "http://192.168.100.11:27257/api/port"; RpcTaskRequest request = new RpcTaskRequest(); request.HttpMethod = "GET"; request.Url = postUrl; RpcTaskResult result = Rest.StartTask(request); if (result.Headers.Count > 0) { Response.AppendHeader("Port", result.Headers["Port"]); } Write(result.Text); return; }
整體說明:
Taurus.Plugin.Rpc.Rest 類提供一種基於REST方式的高性能的調用方法,適用於微服務間的調用,也適用於平時的網絡請求,作爲微服務間的通訊基礎。
由於後續針對Taurus.MVC 微服務增加了新的封裝調用方式,微服務間的調用將不再直接使用Rest調用,而是採用下面封裝好的類庫。
2、Taurus.MVC 微服務 演示示例啓動:
對於常規的 Rpc 遠程調用,如gRpc等,通常需要編寫很多代碼或配置項,這將很大程度影響開發效率。
而 Taurus.MVC 將解決這一點,可以直接在註冊中心下載封裝好的 Rpc調用類庫。
爲了演示,下面將啓動示例程序:
1、啓動微服務註冊中心:(這裏監聽 8000 端口)
2、啓動微服務客戶端A:(從啓動項中可看出只註冊了 /api/ 服務)
3、Taurus.MVC 微服務 Rpc 的調用方式二:下載程序集:
下面教和演示如何下載程序集:
1、首先進入註冊中心管理後臺:在微服服主菜單 MS-Host 中如下圖
管理後臺默認路徑:/admin/login
2、點擊 api 模塊接口,在下方的列表中點擊 Download:
將引出以下界面,該界面可以自定義生成的 dll 名稱(同時也影響名稱空間)
按默認,直接點確定,即可下載:
默認瀏覽器會對dll類型做出提示,常規操作正常保留即可。
重點說明:
動態生成的 dll 運行時版本,將和微服務客戶端的版本一致: 比如微服務客戶端是部署成.NET8,那麼生成的dll,只能在>=Net8的版本使用。 如果其它調用端的版本低怎麼辦? 下面會介紹介紹代碼模式來解決這個問題。
4、Taurus.MVC 微服務 Rpc 的調用方式二:使用程序集:
接下來,我們可以在任意的其它微服務客戶端中,引用該下載的dll,即可實現調用客戶端,
在引用調用微服務之前,我們需要先將運行環境配置好,確保自身也是微服務客戶端環境。
下面進行演示示例(以 .NET 8 爲示例):
1、新建空項目,並引用 Taurus.MVC:
2、啓用 Taurus.MVC
var builder = WebApplication.CreateBuilder(args); builder.Services.AddTaurusMvc(); var app = builder.Build(); app.UseTaurusMvc(); app.UseStaticFiles(); app.Run();
3、進入管理後臺,將項目調整爲微服務客戶端
新建如下兩個文件夾,只有存在Views文件夾,MVC框架纔會生成管理後臺。
管理後臺默認路徑:/admin/login
填寫配置,啓動微服務客戶端,當然,也可以通過配置項啓動:
{ "appSettings": { "MicroService.Client.Name": "*", "MicroService.Client.RcUrl": "http://192.168.100.105:8000" } }
4、添加並使用RpcProxy類庫:
在程序中引用下載的RpcProxy.dll,然後類庫基本信息見如下圖:
A、名稱空間:Taurus.Plugin.MicroService.Proxy 這是基本名稱空間。
B、RpcProxy 類爲下載的 dll 名稱。
C、API 爲客戶端註冊的模塊名。
D、API 下面的方法爲接口名稱。
E、API 下面的類名(以Para結尾)則爲對應方法的參數類
瞭解了基本的信息,下面看一個簡單示例:
public class RpcController : Taurus.Mvc.Controller { public string GetHelloResult() { var rpcTask = RpcProxy.API.Hello(null); if (rpcTask.Result.IsSuccess) { return rpcTask.Result.Text; } else { return "None"; } } }
調用輸出結果:
對於調用 Hello 方法的參數,如果不需要參數,也不需要特殊請求頭,可以傳null。
再給一個演示示例,包含文件上傳:
public string UploadFileResult() { RpcProxy.API.FilePara filePara = new RpcProxy.API.FilePara(); filePara.File = HttpPostedFileCreator.Create("a.webp");//圖片默認在/wwwroot/目錄下 var rpcTask = RpcProxy.API.File(filePara); if(rpcTask.Result.IsSuccess) { return rpcTask.Result.Text; } else { return rpcTask.Result.Error.Message; } }
運行結果:
重點說明:
1、使用該類庫前,需要確保引用了 Taurus.MVC,並確認運行環境也是微服務客戶端。
2、如果方法有參數,則有一個對的方法名+Para 類,如上的Hello方法對應的參數爲:HelloPara 類。
3、如果方法沒有參數,則由默認RestDefaultPara 參數類服務。
4、參數類除了自身的屬性爲對應的參數,還有一個Header參數,用於設置請求頭。
5、涉及文件上傳的,由 HttpPostedFileCreator.Create 方法來提供。
4、Taurus.MVC 微服務 Rpc 的調用方式三:使用代碼:
如果在整體微服務系列中,使用的 .NET 或 .NET Core 版本不一致,會導致其它客戶端可能無法正確引用程序集,因此,框架代碼了代碼的方式。
下面看使用過程:
1、回到註冊中心的管理後臺:
2、點擊ViewCode:
彈出以下提示,效果和下載 dll 的一致。
點擊確定:
默認看到的代碼,沒有格式化,可以瀏覽器右鍵並點擊: 查看頁面源代碼(可以看到代碼經過了格式化,整齊了很多)
3、在項目中新建一個類,比如 RpcProx.cs,然後把該代碼Copy過去即可。
其效果和直接引用下載的程序集是一致的。
目前爲了簡約,生成的dll程序集,或代碼,是沒有帶註釋的,若覺得對接口理解不清楚,可以在註冊中心點擊:ToDoc,即可進入接口文檔。
總結:
新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,不用再手動敲寫模塊名稱、調用路徑,及手動獲取主機信息來實現負載均衡,這一切,由框架內置實現提供了。
新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。