经过上篇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学习总结(三)--持久化篇的更多相关文章

  1. Orleans学习总结(六)--应用篇

    上一篇Orleans学习总结(五)--监控篇,我们这篇来说说我们项目的应用   这是我们项目的结构图   我们分别来说下各个部分 1.Zookeeper作为集群基础,至少开5个,分别在不同的物理机上 ...

  2. Orleans学习总结(五)--监控篇

    上篇说完了Orleans学习总结(四)--集群配置篇,这次我们来说下监控 Orleans有一个强大的社区,为Orleans开发着各种各样的扩展工具,我们用的是OrleansDashboard.Dash ...

  3. Orleans学习总结(四)--集群配置篇

    上篇我们讲了Orleans学习总结(三)--持久化篇,这一篇我们来说说集群配置,毕竟这个才是Orleans的看家本领 Orleans支持热起动,支持自动节点发现,能够断线重发等一系列黑科技. 我这篇是 ...

  4. Redis学习总结(三)--Redis持久化

    Redis 是将数据存储在内存中的,如果出现断电或系统故障的时候数据就会存在丢失的现象,Redis通过将数据持久化到硬盘中来避免这个问题的出现,我们今天就来学习下 Redis 持久化. Redis 持 ...

  5. Orleans学习总结(二)--创建工程

    通过第一篇Orleans学习总结(一)--入门认识我们大致知道知道是干嘛的了,下面我们来动手造一个传说中的神秘的高并发集群Orleans程序. 一.创建四个C#工程 1.IGrain工程,用来定义各种 ...

  6. 从零开始学习jQuery (三) 管理jQuery包装集

    本系列文章导航 从零开始学习jQuery (三) 管理jQuery包装集 一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着 ...

  7. 从零开始学习jQuery (一) 入门篇

    本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些 ...

  8. MyEclipse Spring 学习总结三 SpringMVC

    MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...

  9. Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar

    web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...

随机推荐

  1. iOS 6 新的快捷初始化写法

    转:http://www.2cto.com/kf/201408/328974.html 下列简化写法是IOS6.0以后的新写法 NSNumber //简化前的写法: NSNumber *value1; ...

  2. Spark2.3(三十五)Spark Structured Streaming源代码剖析(从CSDN和Github中看到别人分析的源代码的文章值得收藏)

    从CSDN中读取到关于spark structured streaming源代码分析不错的几篇文章 spark源码分析--事件总线LiveListenerBus spark事件总线的核心是LiveLi ...

  3. 开源的.NET系统推荐

    C# 源码 AForge.NET     RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的 ...

  4. getting-started-with-mqtt

    来自:https://dzone.com/refcardz/getting-started-with-mqtt SECTION 1 Why MQTT? The Internet of Things ( ...

  5. MySQL5.7多主一从(多源复制)同步配置

    MySQL5.7多主一从(多源复制)同步配置(抄袭) 原文地址:https://my.oschina.net/u/2399373/blog/2878650 多主一从,也称为多源复制,数据流向: 主库1 ...

  6. 浅谈常用的几种web攻击方式

    一.Dos攻击(Denial of Service attack) 是一种针对服务器的能够让服务器呈现静止状态的攻击方式.有时候也加服务停止攻击或拒绝服务攻击.其原理就是发送大量的合法请求到服务器,服 ...

  7. Orace 12.2 ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_21"

    一个测试环境的12.2.0.1数据库后台alert不断报出以下错误信息: Errors in file /d12/app/oracle/diag/rdbms/test/test/trace/test_ ...

  8. R语言编程艺术#01#数据类型向量(vector)

    R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...

  9. 6.翻译系列:EF 6 Code-First中数据库初始化策略(EF 6 Code-First系列)

    原文链接:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-firs ...

  10. 7.翻译系列:EF 6中的继承策略(EF 6 Code-First 系列)

    原文地址:http://www.entityframeworktutorial.net/code-first/inheritance-strategy-in-code-first.aspx EF 6 ...