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>
类型的。
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
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
Orleans MultiClient 多个Silo复合客户端相关推荐
- Orleans 2.0 官方文档 —— 5.4 集群和客户端 - 异构的silo
异构的筒仓 概览 在给定的集群上,silo可以支持一组不同的grain类型: 在这个例子中,集群支持类型为A,B,C,D,E的grain: grain类型A和B可放置在silo 1和2. grain ...
- Orlens入门概念(4)Orleans 服务进程Silo
Orleans 应用程序 正如前面的主题所述,典型的Orleans应用程序由一组服务器进程(孤岛)组成,其中包含Grainlive和一组客户端进程(通常是web服务器),它们接收外部请求,将它们转换为 ...
- Orleans 3.0 为我们带来了什么
原文:https://devblogs.microsoft.com/dotnet/orleans-3-0/ 作者:Reuben Bond,Orleans首席软件开发工程师 翻译:艾心 这是一篇来自Or ...
- Orleans 知多少 | 2. 核心概念一览
Orleans 术语解读 上面这张图中包含了Orleans中的几个核心概念: Grain Silo Orleans Cluster Orleans Client 从这张图,我们应该能理清他们之间的关系 ...
- Microsoft Orleans 之 入门指南
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- Orleans 2.0 官方文档中文版 (闫辉)
目录 第一章 概览 1.1 概览 -> 介绍 1.2 概览 -> 优点 1.3 概览 -> 常见问题 1.4 概览 -> Orleans 2.0 1.5 概览 -> Or ...
- Orleans 2.0 官方文档 —— 5.2 集群和客户端 - silo的生命周期
silo的生命周期 概述 Orleans silo使用可观察的生命周期(参见Orleans Lifecycle),来有序地启动和关闭Orleans系统以及应用程序层组件. 阶段 Orleans Sil ...
- Orleans 2.0 官方文档 —— 5.6.2 集群和客户端 - 监控 - silo错误代码监控
silo错误代码监控 组 日志类型 记录代码值 阈 描述 Azure问题 警告或错误 100800 - 100899 任何错误或警告 读取或写入Azure表存储的暂时性问题将被记录为警告.暂时性读取错 ...
- Orleans 2.0 官方文档 —— 6.8.4 部署 - 多集群支持 - silo的配置
Orleans silo的配置 为了快速了解到概貌,我们将在下面的XML语法中,显示所有相关配置参数(包括可选配置参数): <?xml version="1.0" encod ...
最新文章
- 标准自编码器(TensorFlow实现)
- 社交电商风潮起,中小卖家何处去
- EntityFramework用法探索(三)CodeFirst流畅API
- Wordpress 修改 mysql 插件_史上最详细的WordPress安装教程(三):安装php 5.6及fpm、pdo、mysql等插件...
- node:爬虫爬取网页图片 1
- coloros11跟Android,安卓10与安卓11究竟差异在哪里?我们拿这两台新机试了一下
- FUSE—用户空间文件系统
- Mr.Panda and TubeMaster Gym - 101194J (二分染色有源汇上下界最大费用流)
- 《Python核心编程》第12章 习题
- 公司有加密需求,需要试用天锐绿盾,该如何操作?
- TA进阶实例36(MMD pmx导入Unreal流程)
- python竖线_python画横线竖线作为分界线
- 达摩达兰论估价pdf_应用公司理财PDF下载_(美)阿斯瓦斯・达摩达兰_机械工业出版社_会计_管理_零度图书网...
- nmds与mds的区别_聚类分析和NMDS分析的基本步骤.doc
- u盘如何在计算机应用内存,u盘扩大内存,小编教你如何用U盘扩展内存
- k8s节点假死排查记录
- 组装密度io/cm_组装领域:什么是正确的组装/图书馆数量?
- 使用Matlab绘制gif动图
- 2018NOIp爆零记
- SaaS企业如何构建与自身增长目标相匹配的市场力?