Orleans高级功能

1、Reentrant Grains
2、请求上下文
3、激活垃圾收集
4、外部任务和Grains
5、序列化
6、代码生成
7、在Silo内的应用程序引导
8、拦截器
9、取消令牌
10、Powershell客户端
11、Grains版本控制
12、Event Sourcing
十3、多群集支持shell

 

1、Reentrant Grains编程

Grain类有如下两个方法ui

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行。this

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

 

2、请求上下文线程

1,RequestContext包含两个方法:版本控制

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

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

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

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

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

 

3、激活垃圾收集

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>

 

4、外部任务和Grains

 

 

 

5、序列化

 

6、代码生成

 

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

 

8、拦截器

 

9、取消令牌

 

10、Powershell客户端

 

11、Grains版本控制

 

12、Event Sourcing

 

十3、多群集支持

相关文章
相关标签/搜索