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();
}
}
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学习总结(二)--创建工程的更多相关文章
- angular学习笔记(二)-创建angular模块
如果在页面的html标签(或任意标签)中添加ng-app,表示对整个页面应用angular来管理. 他是一个模块. 模块有助于把东西从全局命名空间中隔离. 今天学习如何自定义创建模块: <!DO ...
- MSMQ学习笔记二——创建Message Queue队列
一.创建Message Queue队列的主要流程 1.定义MQQUEUEPROPS 结构: 2.设置消息队列属性: 3.初始化MQQUEUEPROPS 结构: 4.调用MQCreateQueue创建队 ...
- Orleans学习总结(三)--持久化篇
经过上篇Orleans学习总结(二)--创建工程的介绍,我们的工程已经跑起来了,下面我们来介绍下持久化相关. 关于持久化的文档地址在这http://dotnet.github.io/orleans/D ...
- [liusy.api-SMJ]-创建工程范例 MAVEN archetype 学习阶段(一)
由于这个架构需要好多不同能力的工程,为了创建方便减少冗余,创建工程范例尤为重要 学习阶段: 参考资料 http://maven.apache.org/archetype/maven-archetype ...
- AltiumDesigner学习笔记(一)——创建工程与原理图文件
一.创建工程与原理图文件 1.通过菜单创建PCB工程 (1)File - New - Project - PCB Project,即可在当前工作区创建新的PCB工程 (2)新建工程并不直接在硬盘中创建 ...
- Ubuntu下Django初体验(二)——创建工程及应用
一.工程目录详解 创建工程后得到如下目录: 1. manage.py 管理项目.创建数据库.启动服务器等.测试等. 查看子命令: python manage.py 启动服务器: python mana ...
- InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移
系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...
- 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目
原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...
- net core Webapi基础工程搭建(二)——创建工程
目录 前言 创建工程 工程文件概述(个人理解) 运行 小结 前言 前面介绍了开发工具及net core版本,后端工程的框架结构开发工具及环境,因为是基础工程,所以没考虑太复杂的框架,如果有架构师请勿喷 ...
随机推荐
- ScrollView不能包含多个子项,ScrollView can host only one direct child
http://debuglog.iteye.com/blog/1441828 ScrollView不能包含多个子项,ScrollView can host only one direct child ...
- PHP的unset究竟会不会释放内存?
首先让我们看一个例子 var_dump(memory_get_usage()); $a = "laruence"; var_dump(memory_get_usage( ...
- 关于#progma comment 中库文件相对路径问题
最近做一个验证程序的对话框编程,因为里面要要用到静态链接库,所以就稍微的学习了下静态链接库知识,学习的过程中感觉到了自己所了解的东西实在是少的可怜,更加坚定了自己要更加上进的决心,要把以前所丢掉的都给 ...
- Spring.profiles多环境配置最佳实践
转自:https://www.cnblogs.com/jason0529/p/6567373.html Spring的profiles机制,是应对多环境下面的一个解决方案,比较常见的是开发和测试环境的 ...
- mipmap和drawable文件夹的区别
在Android上创建工程,会默认创建mipmap文件夹.之前在Eclipse上创建的是drawable的文件夹.那么这两个有什么区别呢? 问题: I'm working with android s ...
- WIN10平板系统 如何自定义分辨率,修改分辨率
从以下网址下载Intel网卡驱动,注意只要下载zip版本的(如果是exe版本的,双击将提示win10无法为此计算机验证正在安装的驱动程序,也包括你用驱动精灵这种软件,也会安装的时候由于这个问题装不上) ...
- android ndk-build 编译静态库libxx.a 以及Android studio openssl 静态库配置(cmake)
android ndk-build 编译静态库libxx.a 需求场景: 目前有安卓编码好的现在的openssl的两个.a,我们需要调用openssl的函数,并把功能再封装成.a; 这样使用时,在an ...
- SessionFactory 执行原生态的SQL语句
public List<User> getPageIndex(int pageIndex,int topNum){ String hql = "select top(" ...
- Effective Java 第三版——49. 检查参数有效性
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Ubuntu 13.10 安装Terminalx 后更改默认终端设置
1.安装 terminalx, sudo apt-get install terminator 2.Ctrl+ Alt + t 试一下打开什么终端,我的默认启动的是Terminator;如果想换换默认 ...