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

摘要:
“);}}4)添加项目依赖项3.宿主项目,它加载继承自Orleans.Green的同一级别目录的所有dll。1)创建Console项目,它也可以是其他GUI项目。2.添加依赖项PM˃安装包Microsoft.Orleans.Server 3。使用System编写代码;使用系统。收藏。通用的使用系统。Linq;使用系统。文本使用系统。线程。任务;使用奥尔良。运行时。主办namespaceHost{classProgram{staticvoidMain{varconfig=Orleans.Runtime.Configuration.ClusterConfiguration.LocalhostPrimarySilo();使用{try{host.InitialOrleansSilo()、host.StartOrleansSilo()捕获{Console.WriteLine;Console.ReadLine();Console.WriteLine}4.客户项目是我们的前端项目。注意,它的定位并不意味着,例如,CS架构中的C。它是请求业务逻辑的入口,可能是Web服务器。1) 添加项目2。添加依赖项PM˃安装包Microsoft.Orleans。客户端3.编写usingSystem代码;使用System.Collections。通用的使用系统。Linq;使用系统。文本使用系统。穿线;使用System.Threading。任务;使用奥尔良;使用奥尔良。运行时;namespaceClient{classProgram{staticvoidMain{Task.Run.GetAwaiter().GetResult();}publicstaticasyncTaskStart{while{try{varconfig=Orleans.Runtime.Configuration.ClientConfiguration.LocalhostSilo();GrainClient.Initialize;break;}catch{awaitTask.Delay;}}安慰WriteLine;而{Console.WriteLine;varianput=Console.ReadLine();if(!

 通过第一篇Orleans学习总结(一)--入门认识我们大致知道知道是干嘛的了,下面我们来动手造一个传说中的神秘的高并发集群Orleans程序。

一、创建四个C#工程

1、IGrain工程,用来定义各种业务逻辑对象的接口的工程

1)创建一个Class Library工程

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

2)安装Olreans依赖
PM> Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
或者右键Refrerence->Manage NuGet Packages
Orleans学习总结(二)--创建工程第2张


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工程

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

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)添加工程依赖

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

3、Host工程,他加载所有跟他同级目录的有类继承自Orleans.Grain的dll

1)创建一个Console工程,你也可以是其他的GUI工程

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

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)添加工程

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

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、工程依赖

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

二、启动工程

1)4个工程都已经创建好了,设置下启动项

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

2)将4个工程输出目录都设置到一个目录,目的是为了让Host能加载到dll

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

三、测试工程

1)F5启动

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

当你得到这样的输出就说明一切正常

1)在Client控制台程序下敲入字符,看效果

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

总结:至此我们的Orleans工程都跑起来了,单机版Orleans就分4部分:接口,实现,Host,Client。

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

免责声明:文章转载自《Orleans学习总结(二)--创建工程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server 存储过程具体解释Golang学习--平滑重启下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx 转发请求头信息

nginx 转发请求头信息 让后台接口程序能获取到必要的请求头信息 # 转发host proxy_set_header Host $host; # 转发用户ip proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_f...

java中日期的换算处理

JAVA8中的日期API是JSR-310的实现,并且是工作在ISO-8601日历系统基础上的,但我们也可以在非ISO的日历上。JDK8的日期API大致分为以下几个包: 1 java.time包:JDK8中的基础包,所有常用的基础类都是这个包的一部分,如LocalDate,LocalTime,LocalDateTime等等,所有这些类都是不可变且线程安全的...

ipmitool管理工具

一、ipmitool简介 IPMI(Intelligent Platform Management Interface)智能平台管理接口 1、IPMI的核心是一个专用芯片/控制器(叫做服务器处理器或基板管理控制器(BMC)),其并不依赖于服务器的处理器、BIOS或操作系统来工作,可谓非常地独立,是一个单独在系统内运行的无代理管理子系统。 2、IPMI功能:...

SourceTree安装跳过注册

  问题描述 SourceTree是一个可视化管理版本文件的工具,但是注册的时候需要打开外国的网站. 因此要安装时需要绕过这一步才能使用.  解决方案 1. 在下面路径下创建一个accounts.json文件(把"你的电脑用户名"部分替代成你自己的信息)     C:Users"你的电脑用户名"AppDataLocalAtlassianSourceTre...

SystemInfo获取设备系统参数

using UnityEngine; using System.Collections; using System.Collections.Generic; publicclassGameControllerScript:MonoBehaviour { //指定输出文本框 publicUnityEngine.UI.Text messageText; //存...

为DataGrid添加自动编号功能

下面的代码实现在DataGrid中添加自动编号的功能,主要是在数据绑定时利用Item属性。 DataGridWithLine.aspx <%@ Page Language="vb" AutoEventWireup="false" Codebehind="DataGridWithLine.aspx.vb"Inherits="aspxWeb.DataG...