• 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。

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

  • 相关阅读:
    LayoutInflater作用及使用--自定义EditText,自带清除内容按钮
    SSL backend error when using OpenSSL pycurl install error
    pypyodbc 的坑
    mongo aggregate 删除重复数据
    如何验证代理ip的正确性
    python的非官方的一个下载lib的地方
    rabbitmq web 管理系统的信息
    内存泄漏分析
    readme 语法
    logging dictconfig
  • 原文地址:https://www.cnblogs.com/mrblue/p/8448110.html
Copyright © 2020-2023  润新知