介紹
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
朋友會在“發現-看一看”看到你“在看”的內容