1. 程式人生 > >Orleans MultiClient 多個Silo復合客戶端

Orleans MultiClient 多個Silo復合客戶端

typeof ons 暫時 option ref itl provide 客戶 建立

目錄

  • 介紹
  • 使用
    • 簡單例子
  • 配置
    • 註入到 DI 容器
    • 添加多個 Client
    • 全局 Orleans 服務配置

介紹

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

簡單例子

如果有一個服務需要同時調用 AB 兩個 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 服務。

// 調用 A 服務。
var serviceA = _serviceProvider.GetRequiredService<IOrleansClient>().GetGrain<IHelloA>(1);
var resultA = serviceA.SayHello("Hello World Success GrainA").GetAwaiter().GetResult();

// 調用 B 服務。
var serviceB = _serviceProvider.GetRequiredService<IOrleansClient>().GetGrain<IHelloB>(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<OrleansClientOptions> 類型的。

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

全局 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 服務配置

Orleans MultiClient 多個Silo復合客戶端