zoukankan      html  css  js  c++  java
  • 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脚本,这个脚本就在MyOrleanspackagesMicrosoft.Orleans.OrleansSqlUtils.1.5.3lib et461MySql

    创建完如下图

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

  • 相关阅读:
    怎么判断一个bug到底是前端的bug还是后端的bug
    charles抓包原理
    java基础|Properties文件解析
    java基础|break、continue和return
    Java使用JSONPath解析JSON完整内容详解
    10/23/2019
    有什么好怕的
    [转]一个急刹车,过路老人吓得病发身亡 司机要担责吗?
    [转]7岁女孩练舞下腰致残,舞蹈培训机构被判赔115万
    Salesforce权限管理
  • 原文地址:https://www.cnblogs.com/mrblue/p/8448260.html
Copyright © 2011-2022 走看看