Taurus.MVC 微服務框架 入門開發教程:專案整合:7、微服務間的呼叫方式(調整):引用程式集及程式碼下載(新增)

路过秋天發表於2024-04-25

前言:

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

相關文章