介紹
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 服務。
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 服務配置,如連線元件(Consul、Zookeeperr、等)。如果配置了全域性 Orleans 服務配置這個選項可以不配置,但是這選項配置之後會改寫上面的全域性 Orleans 服務配置。
原文地址:https://www.cnblogs.com/lfzm/p/10606584.html
知識星球
朋友會在“發現-看一看”看到你“在看”的內容