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

准备工作:

  1. 安装VS2013
  2. 安装Orleans的SDK; (点击SDK网盘下载)
  3. 了解grain概念;
  4. 了解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

 
摘要: 开源地址: https://github.com/dotnet/orleans昨天编译了一下,这个最新的Orleans安装程序(用github源码编译的)下载地址:http://pan.baidu.com/s/1bntoEtDOrleans官方文档:https://github.com/dotnet...阅读全文
posted @ 2015-01-27 14:34 Witte 阅读(1717) | 评论 (8) 编辑
摘要: Timers and Reminder 定时器和提醒器 Orleans runtime 允许开发人员通过一种叫做timer和另一种叫做reminder的机制为grain添加周期性行为。接下来我分别为大家介绍Timer和ReminderTimers 定时器 Timer用于创建grain的定时任务,但这...阅读全文
posted @ 2014-12-29 21:39 Witte 阅读(267) | 评论 (1) 编辑
摘要: Orleans在默认情况下只创建一个grain的实例,并以单线程模型执行。如果同一个grain实例,在Orleans存在多个实例,就会产生并发冲突,单线程执行模型就可以完全避免并发冲突了。 但在特殊场景下,有些实例是需要创建多个实例或者以非单线程的执行方式来满足性能的需要; 如何支持创建多个实例 对于了解负载均衡的人,如果web服务器支持无状态(分布式Sesson或者cookie身份识别),会...阅读全文
posted @ 2014-12-29 19:28 Witte 阅读(53) | 评论 (0) 编辑
摘要: 什么是orleans Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务。Orleans项目基本上被认为是并行计算模型Actor Model的分布式版本 虽然已经存在Erlang 和Akka这样利用Actor Model的框架,用户仍然需要做很多工作来确保...阅读全文
posted @ 2014-12-22 22:07 Witte 阅读(56) | 评论 (0)  编辑
分类: orleans

orleans开篇之hello world的更多相关文章

  1. Orleans之EventSourcing

    Orleans之EventSourcing 这是Orleans系列文章中的一篇.首篇文章在此 引入: 如果没有意外,我再这篇文章中用ES代替EventSourcing,如果碰到"事件回溯&q ...

  2. 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源

    前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...

  3. ASP.NET Web API 开篇示例介绍

    ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...

  4. Entity Framework入门系列(1)-扯淡开篇

    这是我在Cnblogs上的第一个系列,但愿能坚持下去: 惯例索引 Entity Framework入门系列(1)-开篇兼索引: Entity Framework入门系列(2)-初试Code First ...

  5. Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引

    因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...

  6. web自动化工具-开篇

    web自动化工具-开篇 最近几年,前端技术风一样的速度迭代更新,各种框架工具雨后春笋般涌现,作为一个平凡的开发者,也只能在洪流中沉沉浮浮,微不足道,以前前端叫做切图仔.美工,如今改了称号叫前端工程师, ...

  7. [翻译svg教程]svg学习系列 开篇

    目录 [翻译svg教程]svg学习系列 开篇 [翻译svg教程 ]svg 的坐标系统 [翻译svg教程]svg 中的g元素 [翻译svg教程]svg中矩形元素 rect [翻译svg教程]svg中的c ...

  8. .NET的Actor模型:Orleans

    Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务, 可用于实现DDD+EventSou ...

  9. ABP理论学习之开篇介绍

    返回总目录 为了和2016年春节赛跑,完成该系列博客,我牺牲了今天中午的时间来完成该系列的第一篇----开篇介绍.开篇介绍嘛,读过大学教材的同学都知道,这玩意总是那么无聊,跟考试没关系,干脆直接跳过, ...

随机推荐

  1. Swift UI学习UITableView and protocol use

    Models: UserModel.swift Views: UserInfoCell.swift Controllers: RootViewController.swift, DetailViewC ...

  2. oracle 创建字段自增长——两种实现方式汇总(转)

    mysql等其他数据库中有随着记录的插入而表ID自动增长的功能,而oracle却没有这样的功能,我们有以下两种方式可以解决字段自增长的功能. 因为两种方式都需要通过创建序列来实现,这里先给出序列的创建 ...

  3. MEF初体验之一:在应用程序宿主MEF

    在MEF出现以前,其实微软已经发布了一个类似的框架,叫MAF(Managed Add-in Framework),它旨在使应用程序孤立和更好的管理扩展,而MEF更关心的是可发现性.扩展性和轻便性,后者 ...

  4. vs2015web工程中的html引用压缩后css后无法智能提示的问题解决

    环境:win10x64 vs2015企业版 项目:空白web项目(.net framework4) 问题:html页面加入压缩后的css(eg:bootstrap.min.css),编码的时候无法智能 ...

  5. a web-based music player(GO + html5)

    github 住址:https://github.com/codercheng/music-player 后台是用GO (windows/ linux 都能够),前端是HTML5 推荐用chrome浏 ...

  6. 2014年辛星Javascript解读第四节 流程控制语句

    上一节我们介绍了函数,本小节我们介绍一下流程控制语句,对于不论什么一门编程语言来说,流程控制都是很重要的,也就是我们常说的顺序结构.选择结构和循环结构. ************选择结构******* ...

  7. Chromium on Android: Android在系统Chromium为了实现主消息循环分析

    总结:刚开始接触一个Chromium on Android时间.很好奇Chromium主消息循环是如何整合Android应用. 为Android计划,一旦启动,主线程将具有Java消息层循环处理系统事 ...

  8. 60分钟Python快速学习(转)

    60分钟Python快速学习(给发哥一个交代) 阅读目录 第一步:开发环境搭建: 第一个Python功能:初识Python 02.Python中定义变量不需要数据类型 03.在Pythod中定义方法 ...

  9. CSS3实现Tooltip提示框飞入飞出动画

    原文:CSS3实现Tooltip提示框飞入飞出动画 我们见过很多利用背景图片制作的Tooltip提示框,但是缺点是扩展比较麻烦,要经常改动图片.还有就是利用多层CSS的叠加实现,但是效果比较生硬,外观 ...

  10. HDU 5052 Yaoge’s maximum profit 光秃秃的树链拆分 2014 ACM/ICPC Asia Regional Shanghai Online

    意甲冠军: 特定n小点的树权. 以下n每一行给出了正确的一点点来表达一个销售点每只鸡价格的格 以下n-1行给出了树的侧 以下Q操作 Q行 u, v, val 从u走v,程中能够买一个鸡腿,然后到后面卖 ...