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、多羣集支持

相關文章
相關標籤/搜索