服务端配置Silo通过 Silo配置有几个关键方面:
这是Silo配置的示例,该Silo配置定义群集信息,使用Azure群集并配置应用程序部分: var silo = new SiloHostBuilder() // 集群信息 .Configure<ClusterOptions>(options => { options.ClusterId = "my-first-cluster"; options.ServiceId = "AspNetSampleApp"; }) // 群集提供程序 .UseAzureStorageClustering(options => options.ConnectionString = connectionString) // 端口设置 .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000) // 应用程序部分:只需引用我们使用的一个grain实现类即可 .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(HelloGrain).Assembly).WithReferences()) // 创建Silo! .Build(); 注意:使用 下面让我们细分该示例中使用的步骤: Orleans集群信息[...] // 集群信息 .Configure<ClusterOptions>(options => { options.ClusterId = "my-first-cluster"; options.ServiceId = "AspNetSampleApp"; }) [...] 这里我们做了两件事: 将设置ClusterId为"my-first-cluster":这是Orleans集群的唯一ID。使用此ID的所有客户端和Silo将能够直接相互通信。但是,您可以选择ClusterId对不同的部署使用不同的名称。 集群提供商(什么鬼)[...] // 群集提供程序 .UseAzureStorageClustering(options => options.ConnectionString = connectionString) [...] 通常,基于Orleans构建的服务会部署在专用硬件或Azure上的节点群集上。对于开发和基本测试,可以将Orleans部署在单节点配置中。当部署到节点集群中时,Orleans内部实现一组协议以发现和维护集群中Orleans孤岛的成员身份,包括节点故障检测和自动重新配置。 为了可靠地管理群集成员身份,Orleans使用Azure Table,SQL Server或Apache ZooKeeper进行节点同步。 在此示例中,我们使用Azure Table作为成员资格提供程序。(现在微软官网的东西都在推Azure,但是用它多少还是有点麻烦,还好能用SQL Server,后面的笔记中,我更多的可能会去使用SQL Server) 端口var silo = new SiloHostBuilder() [...] // 端口设置 .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000) [...] Orleans的Silo有两种典型的端点配置类型: Silo到Silo的端点,用于同一集群中Silo之间的通信 在大多数情况下,此方法应该足够了,但是如果需要,我们可以进一步对其进行自定义。 下面是一个如何通过一些端口转发使用外部IP地址的示例: [...] .Configure<EndpointOptions>(options => { // 用于 Silo-to-Silo 的端口 options.SiloPort = 11111; // gateway 的端口 options.GatewayPort = 30000; // 在集群中进行注册的IP地址 options.AdvertisedIPAddress = IPAddress.Parse("172.16.0.42"); // 监听的silo 远程连接点 options.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, 40000); // 监听的silo 远程端口连接点 options.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, 50000); }) //监听的主silo 远程连接点 为空则创建一个主silo连接点 .UseDevelopmentClustering(new IPEndPoint(IPAddress.Parse("192.168.8.1"),11111)) [...] 在内部,Silo将侦听 应用部分[...] // Application parts: just reference one of the grain implementations that we use .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ValueGrain).Assembly).WithReferences()) [...]; 尽管从技术上来说这不是必需的步骤(如果未配置,Orleans将扫描当前文件夹中的所有程序集),但鼓励开发人员进行配置。此步骤将帮助Orleans加载用户程序集和类型。这些组件称为应用程序零件。所有粒度,粒度接口和序列化程序都是使用“应用程序部件”发现的。 应用部件使用配置 以下扩展方法
通过上述方法添加的程序集可以在其返回类型上使用以下扩展方法进行补充
类型发现要求提供的应用程序部分包括特定属性。建议将构建时代码生成程序包( |
|