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(); //写入,一般不需要我们手动调用

原文地址:https://www.cnblogs.com/mrblue/p/8448260.html

时间: 2024-10-10 20:10:49

Orleans学习总结(三)--持久化篇的相关文章

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

上一篇Orleans学习总结(五)--监控篇,我们这篇来说说我们项目的应用 这是我们项目的结构图 我们分别来说下各个部分 1.Zookeeper作为集群基础,至少开5个,分别在不同的物理机上 2.Silo就是我们业务逻辑,比方我们把一个Player拆分成多个Grain,LoginGrain,FriendGrain,TeamGrain,StatisticGrain,RankGrain.还包含GameGrain,Grain负责启动GameServer进程. 3.Gate是一个高吞吐量的转发服务器,是

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

上篇说完了Orleans学习总结(四)--集群配置篇,这次我们来说下监控 Orleans有一个强大的社区,为Orleans开发着各种各样的扩展工具,我们用的是OrleansDashboard.Dashboard. https://github.com/OrleansContrib/OrleansDashboard 一.使用方法 1.安装扩展 2.配置 <BootstrapProviders> <Provider Type="OrleansDashboard.Dashboard&

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

上篇我们讲了Orleans学习总结(三)--持久化篇,这一篇我们来说说集群配置,毕竟这个才是Orleans的看家本领 Orleans支持热起动,支持自动节点发现,能够断线重发等一系列黑科技. 我这篇是以Zookeeper为例说明. 一.开启Zookeeper Zookeeper是什么和怎么配置我就这里就不赘述,自行百度.官方推荐至少开5个,我这做测试就只开1个. 二.安装Orleans的Zookeeper的依赖库 三.Host配置 1.在上篇里提到的OrleansConfiguration.xm

学习IOS开发UI篇--UI知识点总结(三) UIScrollView/UIPageControl/NSTimer

UIScrollView:常用属性 @property(nonatomic)   UIEdgeInsets     contentInset;               // default UIEdgeInsetsZero. add additional scroll area around content @property(nonatomic,getter=isPagingEnabled) BOOL   pagingEnabled;     // default NO. if YES,

Python学习(三):入门篇:Python中怎么编写类

Python中怎么编写类 Last Edit 2013/5/2 先看一个例子: #person.py class person: """class to representaion a person""" def __init__(self,name,age): self.name=name if 0<age<=150: self.age=age else: print 'age is no valid!' def display(s

GSON使用的学习笔记,进阶篇(三)

本篇笔记内容比较杂乱,没有专门去整理. TypeAdapter 现在轮到TypeAdapter类上场,但考虑到gson默认行为已足够强大,加上项目实践中应用json时场景不会太复杂,所以一般不需要自定义TypeAdapter.TypeAdapter优点是集成了JsonWriter和JsonReader两个类,定义了一套与gson框架交互的良好接口,同时便于管理编码和解码的实现代码,不至于太零碎.因而在了解JsonReader和JsonWriter的使用方法之后,自定义TypeAdapter类来完

ICE学习第三步-----Slice语言

ICE:Slice语言(一)-编译 Introduce简介 Slice(Specification language for ice)是分离对象和对象的实现的基础的抽象机制.Slice在客户端和服务器端之间建立契约,描述应用程序使用的类型对象的接口.这样的描述是独立于实现功能的语言的,所以服务器和客户端的实现所使用的语言没有任何关系. 编译器将语言无关的定义翻译为特定语言的类型定义和API.这些翻译后的类型定义和API将被使用在应用程序的功能中,以及用来与Ice交互.这种从一种语言无关的定义到各

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

通过第一篇Orleans学习总结(一)--入门认识我们大致知道知道是干嘛的了,下面我们来动手造一个传说中的神秘的高并发集群Orleans程序. 一.创建四个C#工程 1.IGrain工程,用来定义各种业务逻辑对象的接口的工程 1)创建一个Class Library工程 2)安装Olreans依赖PM> Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build或者右键Refrerence->Manage NuGet Packages

学习编程之Python篇(一)

第一次接触编程,你将面对两大难题: 1.  对所要使用的编程语言的语法和语义不甚了了. 2.  不知道如何通过编程来解决问题. 作为一名新手,你会尝试同时来解决这两个难题:一边熟悉编程语言的语法语义,一边考虑如何靠编程解决问题.这是一个循序渐进的过程,万事开头难,务必保持耐心,切勿操之过急. 学习编程其实没有什么捷径可走,最好的方法就是反复操练,聆听规则,讨论方法,都不如真正做点什么. 在掌握了一些编程语言的语法语义之后,接下来的难题就是怎样才能写出好的程序.那么,我们首先来看看什么是好的程序.