Orleans MultiClient 多个Silo复合客户端
介绍
Orleans.MultiClient 是一个 Orleans 复合客户端,只需要简单配置就可以简单高效连接和请求 Orleans 服务。
Orleans.MultiClient 可以轻松连接多个不同服务的 Orleans 服务,在请求 Orleans 时会根据请求的接口自动寻找 Orleans 客户端,使用者无需关心底层的实现。
Orleans.MultiClient 的开源地址和 Demo
可以在 GitHub
源代码下载查看。
使用
从 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复合客户端的更多相关文章
- Microsoft Orleans 之 入门指南
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- Microsoft Orleans构建高并发、分布式的大型应用程序框架
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- Orleans部署
一.配置指南 1,客户端配置 2,服务端配置 3,典型配置 4,配置.NET垃圾收集 5,SQL系统存储 二.监控 1,运行时监视 2,silo错误代码监测 3,客户端错误代码监测 三.解决部署问题 ...
- 【Orleans开胃菜系列2】连接Connect源码简易分析
[Orleans开胃菜系列2]连接Connect源码简易分析 /** * prism.js Github theme based on GitHub's theme. * @author Sam Cl ...
- Orleans安装
一.Nuget包Orleans NuGet软件包从v1.5.0开始在大多数情况下,您需要使用4个关键的NuGet包: 1,Microsoft Orleans Build-time Code Gener ...
- Microsoft Orleans 之 开发人员指南
开发一个Grain 在开发Grain之前请先阅读Grains 这篇文章 Grain 接口 Grains通过调用各自定义在接口中的方法相互作用,一个grain实现了事先定义好的一个或多个接口,grain ...
- Microsoft Orleans 之安装
先决条件 Orleans 是一个.net 类库集,为了使用它,你需要.net 4.5.1 或者更高版本,开发工具集需要visual studio 2015 或者更高版本或者其他支持的开发工具,不支持V ...
- Orleans 知多少 | 2. 核心概念一览
Orleans 术语解读 上面这张图中包含了Orleans中的几个核心概念: Grain Silo Orleans Cluster Orleans Client 从这张图,我们应该能理清他们之间的关系 ...
- Orleans 3.0 为我们带来了什么
原文:https://devblogs.microsoft.com/dotnet/orleans-3-0/ 作者:Reuben Bond,Orleans首席软件开发工程师 翻译:艾心 这是一篇来自Or ...
随机推荐
- [C++] any number to binary (Bit manipulation)
any number to binary (Bit manipulation)
- [C++] Memory_stack_heap
STACK_HEAP_MEMERY_MAP NOTICE: For p1 , where is the address of p1 ?(0x200400) IN STACK For p1 , wher ...
- EZOJ #257
传送门 分析 先进行缩点 之后从终点倒着跑 对于一组边如果有一个点不能到达则这组边直接废掉 最后看只用没废掉的边能不能从起点走到终点 代码 #include<iostream> #incl ...
- hdu 1686 KMP算法
题意: 求子串w在T中出现的次数. kmp算法详解:http://www.cnblogs.com/XDJjy/p/3871045.html #include <iostream> #inc ...
- srand()、rand()、time()函数的用法
srand()就是给rand()提供种子seed. 如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的. 以一个固定的数值作为种子是一个缺点.通常的做法是 :以这样一句srand ...
- mongodb密码忘了怎么办
自己电脑上mongodb好长时间没上了,密码竟然给忘了,悲剧啊! 修改auth为false,然后重新启动mongodb 这时候可以不用登陆直接进入 db.changeUserPassword('use ...
- Visual assint x(转)
最新破解版:Visual Assist X 10.8.2001 破解版 支持VC2013及以下版本 安装步骤: 1. 双击运行VA_A_Setup2001并安装 2. 双击运行Visual Assis ...
- java.lang.NoClassDefFoundError: Could not initialize class com解决方案
编写的时候遇到这样一个bug, java.lang.NoClassDefFoundError: Could not initialize class com 纠结了两天多,但是,没有找到答案,这个问题 ...
- HDU 4514 湫湫系列故事――设计风景线 (树形DP)
题意:略. 析:首先先判环,如果有环直接输出,用并查集就好,如果没有环,那么就是一棵树,然后最长的就是树的直径,这个题注意少开内存,容易超内存, 还有用C++交用的少一些,我用G++交的卡在32764 ...
- 51建设Android版一些技术整理
不知不觉几个月就过去了,新项目已经发了两个大的版(其实已经迭代了3版),趁着项目新版刚刚上线闲下来的时间整理下用到的技术点. 整体架构 采用MVP Android官方MVP架构示例项目解析 推荐一个插 ...