Orleans学习总结(二)--创建工程

 通过第一篇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。

你说这根本不是我想要的集群啊高并发啊,别急,这次我们只是简单的搭建起框架,甚至连配置都直接写在代码里了,后面还有相关的介绍。

posted @ 2018-02-14 11:46  MrBlue  阅读(961)  评论(0编辑  收藏  举报