orleans开篇之hello world
什么是orleans
Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务。Orleans项目基本上被认为是并行计算模型Actor Model的分布式版本
虽然已经存在Erlang 和Akka这样利用Actor Model的框架,用户仍然需要做很多工作来确保那些actors保持在线以及能够处理故障和恢复。Orleans框架着眼复杂项目和actor管理,让用户能够编写分布式项目而无需担心。
Orleans是微软的终极计算机小组(来自其它新闻的说法,这个项目我最开始看到是在微软研究院的页面上)近年来一直研发的项目。
Orleans目前发展到什么阶段了
Orleans社区预览版已于2014年4月发布,据说已经广泛应用在Azure云上,最出名的是支持第一人称射击游戏Halo 4。Orleans研发小组称该编程模型已经连续三年用在Halo Reach和Halo 4终端服务的生产中,并且他们将在2015年初发布Orleans代码。
hello world
根据惯例,我们先来一个hello world
准备工作:
- 安装VS2013
- 安装Orleans的SDK; (点击SDK网盘下载)
- 了解grain概念;
- 了解silo概念
grain是Orleans中的类似于akka中Actor的概念,事实上一个Orleans actor总是存在(akka中并非如此,需要显式的创建),它不能被显式地创建或销毁。它的存在超越它的任何内存实例的生命周期,也因此超越了任何特定服务器的生命周期;其次,Orleans actors自动实例化:如果没有一个actor内存的实例,一个消息发送到actor导致在一个可用的服务器上创建一个新的实例。一个未使用的actor实例将作为资源管理的一部分自动被回收(以上来自微软的博客)。
silo可以认为是grain的容器
这个实例我们简单的建立一个打招呼的实例,我们要建立3个项目①grain interface项目 ②grain implementations 项目 ③控制台项目(既是Orleans Client,又是Orleans silo的Host)



在Witte.OrleansHelloWorldGrainInterface中新建IHello.cs
public interface IHello : Orleans.IGrainWithIntegerKey
{
Task<string> SayHello(string greeting);
}
声明一个SayHello的接口,大家可能留意到了,这个方法返回的是一个Task;对于Orleans中的GrainInterface方法必须声明返回值为Task或Task<T>。因为Orleans中Grain的交互全部都是通过消息异步交互的。
在Witte.OrleansHelloWorldGrain项目中添加引用Witte.OrleansHelloWorldGrainInterface后,添加HelloGrain.cs

public class HelloGrain : Orleans.Grain, IHelloGrain
{
Task<string> IHelloGrain.SayHello(string greeting)
{
return Task.FromResult("You said: '" + greeting + "', I say: Hello!");
}
}

这个实现类需要继承Orleans.Grain和我们之前声明的接口
在Witte.OrleansHelloWorld中添加引用Witte.OrleansHelloWorldGrainInterface,然后打开Program.cs修改代码,修改后如下
Orleans.OrleansClient.Initialize("DevTestClientConfiguration.xml");
var friend = HelloWorldInterfaces.HelloFactory.GetGrain(0);
Console.WriteLine("\n\n{0}\n\n", friend.SayHello("Good morning!").Result);
选择Witte.OrleansHelloWorldGrain作为启动项目,F5运行
控制台会出现很多文字,暂时不必关注,这个是Orleans启动的信息,在控制的最后,会输出结果,如下图

Hello World!完毕
随笔分类 - orleans
orleans开篇之hello world的更多相关文章
- Orleans之EventSourcing
Orleans之EventSourcing 这是Orleans系列文章中的一篇.首篇文章在此 引入: 如果没有意外,我再这篇文章中用ES代替EventSourcing,如果碰到"事件回溯&q ...
- 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源
前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...
- ASP.NET Web API 开篇示例介绍
ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...
- Entity Framework入门系列(1)-扯淡开篇
这是我在Cnblogs上的第一个系列,但愿能坚持下去: 惯例索引 Entity Framework入门系列(1)-开篇兼索引: Entity Framework入门系列(2)-初试Code First ...
- Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引
因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...
- web自动化工具-开篇
web自动化工具-开篇 最近几年,前端技术风一样的速度迭代更新,各种框架工具雨后春笋般涌现,作为一个平凡的开发者,也只能在洪流中沉沉浮浮,微不足道,以前前端叫做切图仔.美工,如今改了称号叫前端工程师, ...
- [翻译svg教程]svg学习系列 开篇
目录 [翻译svg教程]svg学习系列 开篇 [翻译svg教程 ]svg 的坐标系统 [翻译svg教程]svg 中的g元素 [翻译svg教程]svg中矩形元素 rect [翻译svg教程]svg中的c ...
- .NET的Actor模型:Orleans
Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务, 可用于实现DDD+EventSou ...
- ABP理论学习之开篇介绍
返回总目录 为了和2016年春节赛跑,完成该系列博客,我牺牲了今天中午的时间来完成该系列的第一篇----开篇介绍.开篇介绍嘛,读过大学教材的同学都知道,这玩意总是那么无聊,跟考试没关系,干脆直接跳过, ...
随机推荐
- 编程算法 - 数字数组中只出现一次 代码(C)
数字数组中只出现一次 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 一个整型数组里除了两个数字以外, 其它的数字都出现了两次. 请敲代码找出这 ...
- JAVA 统计字符串中中文,英文,数字,空格的个数
面试题:输入一行字符,分别统计出其中英文字母.中文字符.空格.数字和其它字符的个数 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或 ...
- MEF初体验之十:部件重组
一些应用程序被设计成在运行时可以动态改变.例如,一个新的扩展被下载,或者因为其它的多种多样的原因其它的扩展变得不可用.MEF处理这些多样的场景是依赖我们称作重组的功能来实现的,它可已在最初的组合后改变 ...
- OC本学习笔记Foundatio框架集
一.OC数组 OC数组是一个类,它也分不可变数组NSArray和可变数组NSMutableArray. 1➣不可变数组的创建 // 创建一个不可变数组.元素为一个OC字符串对象 ...
- C和指针 (pointers on C)——第十章:结构和联合(下一个)锻炼
//1.本章只为了刷存在演习.. . typedef struct phone { char * quhao; char * jiaohuantai; char * zhanhaoma; }; typ ...
- LinkedBlockingQueue的put,add跟offer的区别(转)
LinkedBlockingQueue的put,add和offer的区别 最近在学习<<Java并发编程实践>>,有很多java.util.concurrent包下的新类.Li ...
- ubuntu12.04 残疾人游客
为了防止陌生人登录你的ubuntu系统.例如,下面的方法,可以采用禁用 游客登录. sudo vi /etc/lightdm/lightdm.conf 在 lightdm.conf 文件末尾加入上 a ...
- 设计模式--模板方法 And State模式
1.模板方法 钩子: 在抽象基类已经有默认的定义,子类选择是否覆盖它 在模板方法模式中, 抽象基类中使用 钩子函数(子类视情况是否覆盖) 来达到控制模板方法中 流程控制的 目的 设计原则: ...
- Message解析流程(转)
Message的解析作为一个共同组件.对应不同格式的msg文件有不同的实现类来解析.用SAXParser. 1:Final class MessageResourceManager 在Start方 ...
- SyntaxHighlighter代码高亮插件
SyntaxHighlighter它是Google Code在一个开源项目,主要用于对代码着色页, 使用十分方便,效果也不错,并且差点儿支持常见的全部语言. 使用步骤: 一.下载并解压缩SyntaxH ...