通过第一篇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();
}
}
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>();
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。

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

Orleans学习总结(二)--创建工程的更多相关文章

  1. angular学习笔记(二)-创建angular模块

    如果在页面的html标签(或任意标签)中添加ng-app,表示对整个页面应用angular来管理. 他是一个模块. 模块有助于把东西从全局命名空间中隔离. 今天学习如何自定义创建模块: <!DO ...

  2. MSMQ学习笔记二——创建Message Queue队列

    一.创建Message Queue队列的主要流程 1.定义MQQUEUEPROPS 结构: 2.设置消息队列属性: 3.初始化MQQUEUEPROPS 结构: 4.调用MQCreateQueue创建队 ...

  3. Orleans学习总结(三)--持久化篇

    经过上篇Orleans学习总结(二)--创建工程的介绍,我们的工程已经跑起来了,下面我们来介绍下持久化相关. 关于持久化的文档地址在这http://dotnet.github.io/orleans/D ...

  4. [liusy.api-SMJ]-创建工程范例 MAVEN archetype 学习阶段(一)

    由于这个架构需要好多不同能力的工程,为了创建方便减少冗余,创建工程范例尤为重要 学习阶段: 参考资料 http://maven.apache.org/archetype/maven-archetype ...

  5. AltiumDesigner学习笔记(一)——创建工程与原理图文件

    一.创建工程与原理图文件 1.通过菜单创建PCB工程 (1)File - New - Project - PCB Project,即可在当前工作区创建新的PCB工程 (2)新建工程并不直接在硬盘中创建 ...

  6. Ubuntu下Django初体验(二)——创建工程及应用

    一.工程目录详解 创建工程后得到如下目录: 1. manage.py 管理项目.创建数据库.启动服务器等.测试等. 查看子命令: python manage.py 启动服务器: python mana ...

  7. InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移

    系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...

  8. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  9. net core Webapi基础工程搭建(二)——创建工程

    目录 前言 创建工程 工程文件概述(个人理解) 运行 小结 前言 前面介绍了开发工具及net core版本,后端工程的框架结构开发工具及环境,因为是基础工程,所以没考虑太复杂的框架,如果有架构师请勿喷 ...

随机推荐

  1. 哪个中年IT男不是一边面对危机,一边咬牙硬抗【转】

    来自: 懂懂笔记 对于 2017 年年末那则令人哀伤的消息,相信很多同龄人都会触目伤怀.面对公司的强制性劝退,深圳中兴网信科技有限公司某研发组主管从办公楼上一跃而下,用最决绝的方式结束了宝贵的生命. ...

  2. Implement strStr() leetcode java

    题目: Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if ...

  3. nodejs sass安装报错一招解决

    背景: 这个问题不是一天两天了,有时候是网速不行,有时候是被墙了,有时候是github把node-sass的包转移目录导致下载失败. Cannot download "https://git ...

  4. 微信支付WxpayAPI_php_v3 错误修改

    微信sdk:WxpayAPI_php_v3 这是下载压缩包的目录结构. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 ce ...

  5. Script Browser & Script Analyzer 1.3更新发布

    感谢Windows PowerShell MVP Kirk Munro.Laurent Dardenne在过去三个星期内为我们提出的各种想法和建议.针对这些的建议,我们对Script Browser ...

  6. 使用 vmstat, mpstat 和 sar 查看系统运行参数

    vmstat 字段含义 Procs r: The number of processes waiting for run time. 等待执行的进程, 数字越大意味着CPU越忙, 果该数字经常大于逻辑 ...

  7. android中Textview 和图片同时显示时,文字省略号显示,图片自动靠到右边

    很纠结的一个标题,实在是不知道怎么去描述这个现象. 上图片吧,先看看需求是什么样的. 1.需求: ​ 视频与票的图标跟在标题后面显示,当标题过长时icon显示到省略号…后(textview省略号显示, ...

  8. 【Android】Android传感器

    1.加速度传感器2.磁场传感器3.方向传感器4.陀螺仪传感器5.重力传感器6.线性加速度传感器7.温度传感器8.光线传感器9.距离传感器10.压力传感器11.计步传感器 首先先查看测试的安卓机拥有的传 ...

  9. Android 组件系列-----Activity初步

    在上篇博文讲解了Android的Activity这个组件的启动流程后,接下来我们就来看看我们的Activity与我们的布局文件的关系吧 我们先来看看一个最简单的布局文件的内容: <Relativ ...

  10. Winform开发框架之通用附件管理模块 --SNF快速开发平台3.3-Spring.Net.Framework

    最近项目太多都没有时间写文章了,实际项目需求一,CS端和windows平板都需要附件上传管理功能.以前做的都是BS的附件管理和上传功能.本来计划在Winform上嵌套一个浏览器直接用bs的附件上传功能 ...