Orleans学习总结(三)--持久化篇
经过上篇Orleans学习总结(二)--创建工程的介绍,我们的工程已经跑起来了,下面我们来介绍下持久化相关。
关于持久化的文档地址在这http://dotnet.github.io/orleans/Documentation/Core-Features/Grain-Persistence.html
Orleans对持久化做了高度封装,使我们开发起来非常简单,而且切换数据库非常方便,简单到只需要几个配置就实现了。
Orleans支持的数据库很多,我这里就以MySQL举例来说。
一、配置部分
上一篇我们没有用到配置文件,配置是直接写在代码里的,这篇我们来介绍下配置文件
1、在Host旁边创建一个OrleansConfiguration.xml,内容如下
<?xml version="1.0" encoding="utf-8"?>
<OrleansConfiguration xmlns="urn:orleans">
<Globals>
<!--主Silo配置,这不是生产环境的配置方式,一般调试开发这样配置-->
<SeedNode Address="localhost" Port="11111" /> <StorageProviders> <!--名字为Default的持久化方式,MySQL-->
<Provider Type="Orleans.Storage.AdoNetStorageProvider"
Name="Default"
AdoInvariant="MySql.Data.MySqlClient"
DataConnectionString="Server=192.168.0.209;Database=orleans;User Id=dbuser;Password=dbuser;"
UseJsonFormat="true" /> </StorageProviders> </Globals>
<Defaults>
<!--Silo和Silo之间通信用的IP和端口-->
<Networking Address="localhost" Port="11111" />
<!--Client用来链接Silo的IP和端口-->
<ProxyingGateway Address="localhost" Port="40000" />
<!--Log配置-->
<Tracing DefaultTraceLevel="Info" TraceToConsole="true" TraceToFile="..\log\{0}-{2}-{1}.log" WriteMessagingTraces="false">
<TraceLevelOverride LogPrefix="Application" TraceLevel="Info" />
<TraceLevelOverride LogPrefix="AssemblyLoader.Client" TraceLevel="Info" />
</Tracing>
</Defaults> </OrleansConfiguration>
2、让Host读取这个配置,去掉这一行,把config参数去掉就行了。Host启动时默认加载OrleansConfiguration.xml这个配置文件

3、还在要Host成功安装依赖库


4、创建MySQL数据库
创建一个名字为orleans的schema,然后执行下CreateOrleansTables_MySql.sql脚本,这个脚本就在MyOrleans\packages\Microsoft.Orleans.OrleansSqlUtils.1.5.3\lib\net461\MySql
创建完如下图

记得第1步配置里的 DataConnectionString="Server=192.168.0.209;Database=orleans;User Id=dbuser;Password=dbuser;",要确保和你的MySQL是连通的。
二、代码部分
1、在Grain工程定义一个类HelloState,并修改HelloGrain类代码,如下
public class HelloState
{
public string Text { get; set; }
}
[StorageProvider(ProviderName = "Default")]
public class HelloGrain : Orleans.Grain<HelloState>, IHello
{
public Task<string> SayHello(string greeting)
{
Console.WriteLine(greeting);
State.Text = greeting;
return Task.FromResult($"You said: '{greeting}', I say: Hello!");
}
}
2、说明
所有public class HelloGrain : Orleans.Grain<HelloState>带模板参数的类都会多一个成员State
State.Text = greeting;就相当于给数据库的Text字段赋值了
[StorageProvider(ProviderName = "Default")] 就是指定这个类的持久化用名为Default的provider,如果不加这一行就默认用用名为Default的provider。
如果你有多个Provider也可以指定成其他的。
3、API
protected virtual Task ClearStateAsync(); //清除数据
protected virtual Task ReadStateAsync(); //读取,一般不需要我们手动调用
protected virtual Task WriteStateAsync(); //写入,一般不需要我们手动调用
Orleans学习总结(三)--持久化篇的更多相关文章
- Orleans学习总结(六)--应用篇
上一篇Orleans学习总结(五)--监控篇,我们这篇来说说我们项目的应用 这是我们项目的结构图 我们分别来说下各个部分 1.Zookeeper作为集群基础,至少开5个,分别在不同的物理机上 ...
- Orleans学习总结(五)--监控篇
上篇说完了Orleans学习总结(四)--集群配置篇,这次我们来说下监控 Orleans有一个强大的社区,为Orleans开发着各种各样的扩展工具,我们用的是OrleansDashboard.Dash ...
- Orleans学习总结(四)--集群配置篇
上篇我们讲了Orleans学习总结(三)--持久化篇,这一篇我们来说说集群配置,毕竟这个才是Orleans的看家本领 Orleans支持热起动,支持自动节点发现,能够断线重发等一系列黑科技. 我这篇是 ...
- Redis学习总结(三)--Redis持久化
Redis 是将数据存储在内存中的,如果出现断电或系统故障的时候数据就会存在丢失的现象,Redis通过将数据持久化到硬盘中来避免这个问题的出现,我们今天就来学习下 Redis 持久化. Redis 持 ...
- Orleans学习总结(二)--创建工程
通过第一篇Orleans学习总结(一)--入门认识我们大致知道知道是干嘛的了,下面我们来动手造一个传说中的神秘的高并发集群Orleans程序. 一.创建四个C#工程 1.IGrain工程,用来定义各种 ...
- 从零开始学习jQuery (三) 管理jQuery包装集
本系列文章导航 从零开始学习jQuery (三) 管理jQuery包装集 一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着 ...
- 从零开始学习jQuery (一) 入门篇
本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些 ...
- MyEclipse Spring 学习总结三 SpringMVC
MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...
- Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar
web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...
随机推荐
- 查询返回JSON数据结果集
查询返回JSON数据结果集 设计目标: 1)一次性可以返回N个数据表的JSON数据 2)跨数据库引擎 { "tables": [ { "cols": [ { & ...
- JetBrains Rider 2018.1 汉化
之前说过了JetBrains系列的破解(最新版本也可以破解)https://www.cnblogs.com/dunitian/p/8478252.html 不少人对全英文的开发环境还是不太适应,那就来 ...
- Linux:修改和删除已有变量
变量修改 变量的修改有以下几种方式: 变量设置方式 说明 ${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据 ${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据 ...
- Spring---面向切面编程(AOP模块)
Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用. AOP 即 Aspect Orien ...
- Visual Studio 2015 与 .NET 4.6 RTM 正式发布
原文地址 微软终于正式发布了Visual Studio 2015产品家族的RTM版本,此次发布体现了微软在开发工具发展方向上的转变迈出了重要的一步,他们致力于提供一种支持在所有主流应用平台上进行应用开 ...
- WIN10平板 如何关闭自动更新
运行,services.msc打开组策略 找到Windows Update,设置启动类型为禁用即可
- Gson解析第三方提供Json数据(天气预报,新闻等)
之前都是自己写后台,自己的server提供数据给client. 近期在看第三方的数据接口,訪问其它站点提供的信息.比方.我们可能自己收集的数据相当有限.可是网上提供了非常多关于天气预报.新闻.星座运势 ...
- python3用BeautifulSoup用字典的方法抓取a标签内的数据
# -*- coding:utf-8 -*- #python 2.7 #XiaoDeng #http://tieba.baidu.com/p/2460150866 #标签操作 from bs4 imp ...
- 部分Linux时区改为东八区的方法
直接上命令 CentOS: timedatectl set-timezone Asia/Shanghai timedatectl status date Alphine: apk add tzdata ...
- nginx https 配置样例
站点nginx https 配置模板 第一章 nginx 支持https 配置样例 其他 相关链接地址 第一章 nginx 支持https 配置样例 说明:https 段配置参数说明 Server 段 ...