通过第一篇Orleans学习总结(一)--入门认识我们大致知道知道是干嘛的了,下面我们来动手造一个传说中的神秘的高并发集群Orleans程序。
一、创建四个C#工程
1、IGrain工程,用来定义各种业务逻辑对象的接口的工程
1)创建一个Class Library工程
2)安装Olreans依赖
PM> Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
或者右键Refrerence->Manage NuGet Packages
3)在Class1.cs里写入代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Orleans; public interface IHello : Orleans.IGrainWithIntegerKey { Task<string> SayHello(string greeting); }
2、Grain工程,实现IGrain中定义的各种业务逻辑
1)创建一个Class Library工程
2)安装Olreans依赖
PM> Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
或者右键Refrerence->Manage NuGet Packages
3)在Class1.cs里写入代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; public class HelloGrain : Orleans.Grain, IHello { public Task<string> SayHello(string greeting) { Console.WriteLine(greeting); return Task.FromResult($"You said: '{greeting}', I say: Hello!"); } }
4)添加工程依赖
3、Host工程,他加载所有跟他同级目录的有类继承自Orleans.Grain的dll
1)创建一个Console工程,你也可以是其他的GUI工程
2、添加依赖
PM> Install-Package Microsoft.Orleans.Server
3、写入代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Orleans.Runtime.Host; namespace Host { class Program { static void Main(string[] args) { var config = Orleans.Runtime.Configuration.ClusterConfiguration.LocalhostPrimarySilo(); using (var host = new SiloHost("Default", config)) { try { host.InitializeOrleansSilo(); host.StartOrleansSilo(); Console.WriteLine("Orleans Silo is running."); Console.WriteLine("Press Enter to terminate..."); Console.ReadLine(); host.StopOrleansSilo(); } catch (Exception e) { Console.WriteLine(e); Console.ReadLine(); } } } } }
4、Client工程,也就是我们的前端工程,注意他的定位并不是说比如我们CS架构里的C,他是请求业务逻辑的入口,可能是个Web服务器。
1)添加工程
2、添加依赖
PM> Install-Package Microsoft.Orleans.Client
3、写入代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Orleans; using Orleans.Runtime; namespace Client { class Program { static void Main(string[] args) { Task.Run(() => Start(args)).GetAwaiter().GetResult(); } public static async Task Start(string[] args) { while (true) { try { var config = Orleans.Runtime.Configuration.ClientConfiguration.LocalhostSilo(); GrainClient.Initialize(config); break; } catch (SiloUnavailableException ex) { await Task.Delay(1000); } } Console.WriteLine("Orleans Client is running."); while (true) { Console.WriteLine("Input to say"); var input = Console.ReadLine(); if (!string.IsNullOrEmpty(input)) { var grain = GrainClient.GrainFactory.GetGrain<IHello>(0); var ret = await grain.SayHello(input); Console.WriteLine(ret); } } GrainClient.Uninitialize(); } } }
4、工程依赖
二、启动工程
1)4个工程都已经创建好了,设置下启动项
2)将4个工程输出目录都设置到一个目录,目的是为了让Host能加载到dll
三、测试工程
1)F5启动
当你得到这样的输出就说明一切正常
1)在Client控制台程序下敲入字符,看效果
总结:至此我们的Orleans工程都跑起来了,单机版Orleans就分4部分:接口,实现,Host,Client。
你说这根本不是我想要的集群啊高并发啊,别急,这次我们只是简单的搭建起框架,甚至连配置都直接写在代码里了,后面还有相关的介绍。