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版本,后端工程的框架结构开发工具及环境,因为是基础工程,所以没考虑太复杂的框架,如果有架构师请勿喷 ...
随机推荐
- 错误<BEA-101165> <Could not load user defined filter in web.xml
<2017-7-4 上午10时13分33秒 CST> <Error> <HTTP> <BEA-101165> <Could not load us ...
- 报错:bash: pip: command not found
$ wget https://bootstrap.pypa.io/get-pip.py$ python get-pip.py$ pip -V #查看pip版本
- Python打包方法——Pyinstaller
Python版本:Python3.5.2 一.安装Pyinstaller 1.安装pywin32 下载安装文件:查找到跟自己适用的python版本及window系统版本匹配的pywin32,下载后安装 ...
- asp.net mvc Session RedisSessionStateProvider锁的实现
最近项目用到了RedisSessionStateProvider来保存session,发现比内存session慢,后来慢慢了解,发现asp.net session是有锁的.我在文章 你的项目真的需要S ...
- 把tree结构数据转换easyui的columns
很多时候我们的datagrid需要动态的列显示,那么这个时候我们后台一般提供最直观的数据格式tree结构.那么需要我们前端自己根据这个tree结构转换成easyui的datagrid的columns. ...
- [Python设计模式] 第2章 商场收银软件——策略模式
github地址: https://github.com/cheesezh/python_design_patterns 题目 设计一个控制台程序, 模拟商场收银软件,根据客户购买商品的单价和数量,计 ...
- Java字节码 小结
Reference javap 基本使用方法 深入理解java字节码 从Java代码到字节码 Java字节码.class文件案例分析 字节码 核心概念 Class文件是8位字节流,按字节对齐.之所以称 ...
- Kotlin VS Java:基本语法差异(转载)
5月18号,goole宣布Kotlin成为官方支持的开发语言以来,Kotlin语言社区,公众号,qq群等全面轰炸,本文是一篇译文,来自国外的一个用户,将给大家介绍,基础语法部分Kotlin和java之 ...
- 基于spring-mybatis-data-common基架快速搭建web应用
spring-mybatis-data-common做了哪些操作 1.日志依据层级归类输出,支持扩展 2.spring-mybatis持久层基础接口集成,支持扩展 3.常用业务接口定义,支持扩展. 只 ...
- 通过nginx中转获取不到IP的问题解决
第一步:在nginx.conf中配置反向代理时把真实IP带上,例如: server { listen 80; server_name myibook.com.cn; loca ...