歡迎光臨
每天分享高質量文章

Orleans MultiClient 多個Silo複合客戶端

介紹

Orleans.MultiClient 是一個 Orleans 複合客戶端,只需要簡單配置就可以簡單高效連線和請求 Orleans 服務。
Orleans.MultiClient 可以輕鬆連線多個不同服務的 Orleans 服務,在請求 Orleans 時會根據請求的介面自動尋找 Orleans 客戶端,使用者無需關心底層的實現。

Orleans.MultiClient 的開源地址和 Demo 可以在 GitHub 原始碼下載檢視。

https://github.com/AClumsy/Orleans.MultiClient/

使用

從 NuGet 下載 Orleans.MultiClient 包。

dotnet add package Orleans.MultiClient

簡單例子

如果有一個服務需要同時呼叫 A 和 B 兩個 Orleans 服務,看一看 Orleans.MultiClient 是怎麼更簡單的呼叫 Orleans 服務的。
第一步:先取用 Orleans.MultiClient 包和 AB 的介面,分別為 IHelloA、 IHelloB
第二步:需要把 Orleans.MultiClient 註入到 DI 容器 中,並且配置新增兩個 Orleans Client。

提示:Orleans.MultiClient 暫時只支援 .NET Core 平臺上面使用。

services.AddOrleansMultiClient(build =>
{
    build.AddClient(opt =>
    {
        opt.ServiceId = "A";
        opt.ClusterId = "AApp";
        opt.SetServiceAssembly(typeof(IHelloA).Assembly);
        opt.Configure = (b =>
        {
            b.UseLocalhostClustering();
        });
    });
    build.AddClient(opt =>
    {
        opt.ServiceId = "B";
        opt.ClusterId = "BApp";
        opt.SetServiceAssembly(typeof(IHelloB).Assembly);
        opt.Configure = (b =>
        {
            b.UseLocalhostClustering(gatewayPort: 30001);
        });
    });
});

第二步:開始呼叫對應的 Orleans 服務。
IOrleansClient 是 Orleans.MultiClient 的複合客戶端,透過 IOrleansClient 呼叫 Orleans 服務。


var serviceA = _serviceProvider.GetRequiredService().GetGrain(1);
var resultA = serviceA.SayHello("Hello World Success GrainA").GetAwaiter().GetResult();


var serviceB = _serviceProvider.GetRequiredService().GetGrain(1);
var resultB = serviceB.SayHello("Hello World Success GrainB").GetAwaiter().GetResult();

簡單吧,只要配置好客戶端之後,在使用的過程中,無需管怎麼連線 Orleans ,只要透過依賴註入得到 IOrleansClient 就可以輕鬆的請求 Orleans 服務。

配置

註入到 DI 容器

AddOrleansMultiClient :把 Orleans.MultiClient 註入到 DI 容器 中,使用時需要透過依賴註入得到 IOrleansClient 。

新增多個 Client

AddClient: 新增多個 Orleans 客戶客戶端,新增客戶端時需要配置 Orleans 相關選項。 Orleans.MultiClient 提供了函式和 IConfiguration 兩種方式進行配置。
使用 IConfiguration 進行配置時需要註意配置檔案的內容必須是 IList型別的。

services.AddOrleansMultiClient(build =>
{
    build.AddClient((OrleansClientOptions opt) =>{
       ...
    }
});

全域性 Orleans 服務配置

Configure:如果所有的 Orleans 的連線配置是一樣的情況下,可以配置全域性的 Orleans 服務配置。
比如:如果所有的 Orleans Silo 都是透過 Consul 進行服務發現的,就可以配置一個全域性配置。

services.AddOrleansMultiClient(build =>{
    build.Configure(b =>{
        b.UseConsulClustering(o =>{
            o.Address = new Uri("https://127.0.0.1:8500");
        });
    });
}

OrleansClientOptions 配置

  • ServiceList:用於在 IOrleansClient 呼叫介面時和 Orleans 連線配置建立關聯。ServiceList 的值時 Orleans Silo 介面的 Assembly.FullName, 由於 Orleans Silo 可能有多個介面,所以 ServiceList 是一個陣列集合。可以透過 SetServiceAssembly 方法來配置 ServiceList。

  • ServiceId:Orleans Silo 的 ServiceId,在連線 Orleans 時需要。

  • ClusterId:Orleans Silo 的 ClusterId,在連線 Orleans 時需要。

  • Configure:Orleans 服務配置,如連線元件(ConsulZookeeperr、等)。如果配置了 全域性 Orleans 服務配置 這個選項可以不配置,但是這選項配置之後會改寫上面的 全域性 Orleans 服務配置

原文地址:https://www.cnblogs.com/lfzm/p/10606584.html

已同步到看一看
贊(0)

分享創造快樂