Orleans MultiClient 多個Silo復合客戶端
目錄
- 介紹
- 使用
- 簡單例子
- 配置
- 註入到 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
簡單例子
如果有一個服務需要同時調用 A
和 B
兩個 Orleans
服務,看一看 Orleans.MultiClient 是怎麽更簡單的調用 Orleans 服務的。
第一步:先引用 Orleans.MultiClient 包和 A
、B
的接口,分別為 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 服務配置,如連接組件(Consul
、Zookeeperr
、等)。如果配置了全局 Orleans 服務配置
這個選項可以不配置,但是這選項配置之後會覆蓋上面的全局 Orleans 服務配置
。
Orleans MultiClient 多個Silo復合客戶端