1、Reentrant Grains
2、請求上下文
3、激活垃圾收集
4、外部任務和Grains
5、序列化
6、代碼生成
7、在Silo內的應用程序引導
8、攔截器
9、取消令牌
10、Powershell客戶端
11、Grains版本控制
12、Event Sourcing
十3、多羣集支持shell
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
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"));
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>
十3、多羣集支持