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?包和?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<IOrleansClient>().GetGrain<IHelloA>(1);
var resultA = serviceA.SayHello("Hello World Success GrainA").GetAwaiter().GetResult();
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>類型的。
{
build.AddClient((OrleansClientOptions opt) =>{
...
}
});
全局 Orleans 服務配置
Configure:如果所有的?Orleans?的連接配置是一樣的情況下,可以配置全局的?Orleans?服務配置。
比如:如果所有的?Orleans?Silo?都是通過?Consul?進行服務發現的,就可以配置一個全局配置。
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
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的Orleans MultiClient 多个Silo复合客户端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#并行编程(1):理解并行
- 下一篇: eShopOnContainers 知多