• Orleans高级功能


    一、Reentrant Grains
    二、请求上下文
    三、激活垃圾收集
    四、外部任务和Grains
    五、序列化
    六、代码生成
    七、在Silo内的应用程序引导
    八、拦截器
    九、取消令牌
    十、Powershell客户端
    十一、Grains版本控制
    十二、Event Sourcing
    十三、多群集支持

    一、Reentrant Grains

    Grain类有以下两个方法

    Task Foo()
    {
        await task1;    // line 1
        return Do2();   // line 2
    }
    
    Task Bar()
    {
        await task2;   // line 3
        return Do2();  // line 4
    }

    如果将这个grain标记为[Reentrant],下面的执行顺序是可能会发生:第1行,第3行,第2行和第4行。

    如果将这个grain没有标记为[Reentrant],唯一可能的执行将是第1行,第2行,第3行,第4行或者第3行第4行第1行第2行(这个grain是单线程执行的)

    二、请求上下文

    1,RequestContext包含两个方法:

    void Set(string key,object value)用于在请求上下文中存储一个值。该值可以是任何可序列化类型。 Object Get(string key)用于从当前请求上下文中检索一个值 

    2,例如,要将客户端中的跟踪标识设置为新的GUID,可以简单地调用:

    RequestContext.Set("TraceId", new Guid());

    在grain代码中(或在调度线程中运行在Orleans的其他代码),可以使用原始客户机请求的跟踪ID,例如,在写入日志时:

    Logger.Info("Currently processing external request {0}", RequestContext.Get("TraceId"));

    三、激活垃圾收集

    1,激活垃圾收集的显式控制 

    ①延迟激活GC

    grain激活可以通过调用this.DelayDeactivation()方法来延迟自己的激活GC:

    protected void DelayDeactivation(TimeSpan timeSpan)

    ②加快激活GC

    通过调用this.DeactivateOnIdle()方法,grain激活还可以指示运行时在下次空闲时停用它。

     protected void DeactivateOnIdle()

    如果目前没有处理任何消息,则谷物激活被认为是空闲的。 如果在grain正在处理消息时调用DeactivateOnIdle,则当前消息的处理完成后将立即停用。 如果有任何排队等待谷物的请求,它们将被转发到下一个激活。

    DeactivateOnIdle优先于配置或DelayDeactivation中指定的任何激活垃圾收集设置。 请注意,此设置仅适用于所谓的grain激活,并不适用于此类grain的其他激活。

    2,配置

    ①编程配置

    默认Collection Age Limit(所有grain类型)可以通过以下方式设置:

      void GlobalConfiguration.Application.SetDefaultCollectionAgeLimit(TimeSpan ageLimit)

    对于单独的grain类型,限制可以通过以下方式设置:

    void GlobalConfiguration.Application.SetCollectionAgeLimit(Type type, TimeSpan ageLimit)

    该限制也可以为grain类型重置,所以默认限制将适用于它,通过:

    void GlobalConfiguration.Application.ResetCollectionAgeLimitToDefault(Type type)

    ②XML配置(不建议使用)

    配置XML文件中的任何时间长度都可以使用指定时间单位的后缀:

    后缀单位
    none millisecond(s)
    ms millisecond(s)
    s second(s)
    m minute(s)
    hr hour(s)

    指定默认收集年龄限制

    通过将OrleansConfiguation / Globals / Application / Defaults / Deactivation元素添加到OrleansConfiguration.xml文件,可以自定义适用于所有grain类型的默认集合期限。 允许的最低年龄限制是1分钟。

    以下示例指定已空闲10分钟或更长时间的所有激活应被视为取消激活的条件。

    <?xml version="1.0" encoding="utf-8"?>
    <OrleansConfiguration xmlns="urn:orleans">
      <Globals>
        <Application>
          <Defaults>
            <Deactivation AgeLimit="10m"/>
          </Defaults>
        </Application>
      </Globals>
    </OrleansConfiguration>

    指定每个类型的年龄限制

    单个grain类型可以使用OrleansConfiguation / Globals / Application / GrainType / Deactivation元素来指定独立于全局默认的集合年龄限制。 允许的最低年龄限制是1分钟。

    在以下示例中,空闲10分钟的激活有资格进行收集,除MyGrainAssembly.DoNotDeactivateMeOften类实例化的激活之外,除非空闲整整24小时,否则不被视为可收集:

    <?xml version="1.0" encoding="utf-8"?>
    <OrleansConfiguration xmlns="urn:orleans">
      <Globals>
        <Application>
          <Defaults>
            <Deactivation AgeLimit="10m"/>
          </Defaults>
          <GrainType Type="MyGrainAssembly.DoNotDeactivateMeOften">
            <Deactivation AgeLimit="24hr"/>
          </GrainType>
        </Application>
      </Globals>
    </OrleansConfiguration>

    四、外部任务和Grains

    五、序列化

    六、代码生成

    七、在Silo内的应用程序引导

    八、拦截器

    九、取消令牌

    十、Powershell客户端

    十一、Grains版本控制

    十二、Event Sourcing

    十三、多群集支持

  • 相关阅读:
    JavaScript系列---【分析局部作用域下的预解析】
    javaScript系列---【分析全局作用域下的预解析】
    javaScript系列---【分析函数的arguments】
    JavaScript系列---【条件if--切换图片案例2 高亮及按钮同步显示】
    javaScript系列---【this详解及call和apply修改this指向】
    JavaScript系列---【选项卡案例】
    JavaScript系列---【QQ列表展开及闭合案例】
    系统安装01-CentOS6系统安装
    hdoj--3635--Dragon Balls(并查集记录深度)
    hdoj--1281--棋盘游戏(最小点覆盖+枚举)
  • 原文地址:https://www.cnblogs.com/zd1994/p/8434626.html
Copyright © 2020-2023  润新知