前言:
今天補充一下 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 功能,將使得服務間的呼叫,更加輕鬆、簡約、高效。