介绍

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

简单例子

如果有一个服务需要同时调用 AB 两个 Orleans 服务,看一看 Orleans.MultiClient 是怎么更简单的调用 Orleans 服务的。

第一步:先引用 Orleans.MultiClient 包和 AB 的接口,分别为 IHelloAIHelloB

第二步:需要把 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 服务配置,如连接组件(ConsulZookeeperr、等)。如果配置了 全局 Orleans 服务配置 这个选项可以不配置,但是这选项配置之后会覆盖上面的 全局 Orleans 服务配置

Orleans MultiClient 多个Silo复合客户端的更多相关文章

  1. Microsoft Orleans 之 入门指南

    Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...

  2. Microsoft Orleans构建高并发、分布式的大型应用程序框架

    Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...

  3. Orleans部署

    一.配置指南 1,客户端配置 2,服务端配置 3,典型配置 4,配置.NET垃圾收集 5,SQL系统存储 二.监控 1,运行时监视 2,silo错误代码监测 3,客户端错误代码监测 三.解决部署问题 ...

  4. 【Orleans开胃菜系列2】连接Connect源码简易分析

    [Orleans开胃菜系列2]连接Connect源码简易分析 /** * prism.js Github theme based on GitHub's theme. * @author Sam Cl ...

  5. Orleans安装

    一.Nuget包Orleans NuGet软件包从v1.5.0开始在大多数情况下,您需要使用4个关键的NuGet包: 1,Microsoft Orleans Build-time Code Gener ...

  6. Microsoft Orleans 之 开发人员指南

    开发一个Grain 在开发Grain之前请先阅读Grains 这篇文章 Grain 接口 Grains通过调用各自定义在接口中的方法相互作用,一个grain实现了事先定义好的一个或多个接口,grain ...

  7. Microsoft Orleans 之安装

    先决条件 Orleans 是一个.net 类库集,为了使用它,你需要.net 4.5.1 或者更高版本,开发工具集需要visual studio 2015 或者更高版本或者其他支持的开发工具,不支持V ...

  8. Orleans 知多少 | 2. 核心概念一览

    Orleans 术语解读 上面这张图中包含了Orleans中的几个核心概念: Grain Silo Orleans Cluster Orleans Client 从这张图,我们应该能理清他们之间的关系 ...

  9. Orleans 3.0 为我们带来了什么

    原文:https://devblogs.microsoft.com/dotnet/orleans-3-0/ 作者:Reuben Bond,Orleans首席软件开发工程师 翻译:艾心 这是一篇来自Or ...

随机推荐

  1. ActiveMQ 使用文档

    一.为什么使用ActiveMQ 在总线的设计中可能会使用到JMS(Java Message Service)通道, Java消息服务(JMS)超越了生产商专有的MOM(Message-Oriented ...

  2. [C++] const inside class VS const outside class

    const inside class VS const outside class 类内:类内的const和c语言一样,可以通过指针间接修改const变量的值,读内存,一开始必须初始化 类外:虽然可以 ...

  3. Java研发书单

    Java研发书单 计算机基础:<深入理解计算机系统><计算机网络> 网络方面:<TCP/IP协议卷一><unix网络编程卷一>(部分章节,JAVA主要是 ...

  4. IPMI命令

    yum -y install ipmitool/etc/init.d/ipmi start ipmitool -I open lan set 1 ipaddr 172.16.8.33ipmitool ...

  5. Mybatis:动态sql

    动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格 ...

  6. python 数据合并

    1. 数据合并 前言 一.横向合并 1. 基本合并语句 2. 键值名不一样的合并 3. “两个数据列名字重复了”的合并 二.纵向堆叠 统计师的Python日记[第6天:数据合并] 前言 根据我的Pyt ...

  7. monkeyrunner小结

    上次说到已经配好了MonkeyRunner的运行环境,现在讲解怎么进行简单的MonkeyRunner测试.这个拖了很久才有时间和心情总结一下.真是计划赶不上变化啊. 就不说废话了.http://dev ...

  8. GitHub 出现这样的问题怎么办

    一开始以为是被墙,憋个半死. 后来自己好了(大概过了一上午),虚惊一场.

  9. emacs-ide配置

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; CEDET Configuration ;;;;;;;;;; ...

  10. 编写高质量代码改善C#程序的157个建议——建议99:重写时不应使用子类参数

    建议99:重写时不应使用子类参数 重写时,如果使用了子类参数,可能会偏离设计者的预期目标.比如,存在一个如下继承体系: class Employee { } class Manager : Emplo ...