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
十三、多群集支持
Orleans高级功能的更多相关文章
- Xen之初体验:XenMotion、 StorageMotion、Site Recovery、Power Management 各种新、高级功能免费
Xenserver 的新版本6.2现在已经全面开源,省掉了原有的序列号,也能免费体验曾经标题中的付费高级功能. 安装镜像:http://downloadns.citrix.com.edgesuite. ...
- MVC5 Entity Framework学习之Entity Framework高级功能(转)
在之前的文章中,你已经学习了如何实现每个层次结构一个表继承.本节中你将学习使用Entity Framework Code First来开发ASP.NET web应用程序时可以利用的高级功能. 在本节中 ...
- C#高级功能(四)扩展方法和索引
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.扩展方法被定义为静态方法,但 ...
- C#高级功能(三)Action、Func,Tuple
Action和Func泛型委托实际上就是一个.NET Framework预定义的委托,3.5引入的特性.基本涵盖了所有常用的委托,所以一般不用用户重新声明. Action系列泛型委托,是没有返回参数的 ...
- C#高级功能(二)LINQ 和Enumerable类
介绍LINQ之前先介绍一下枚举器 Iterator:枚举器如果你正在创建一个表现和行为都类似于集合的类,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的.我们将以创建一个简单化的 ...
- C#高级功能(一)Lambda 表达式
Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LINQ ...
- iOS开发——UI篇Swift篇&玩转UItableView(二)高级功能
UItableView高级功能 class UITableViewControllerAF: UIViewController, UITableViewDataSource, UITableViewD ...
- delphi实现ado的高级功能
ADO是Microsoft存取通用数据源的标准引擎.ADO通过封装OLE DB而能够存取不同类型的数据,让应用程序能很方便地通过统一的接口处理各种数据库.ADO由一组COM对象组成,每一个不同的原生A ...
- Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
动作游戏 还记得读书的时候熬夜打<波斯王子>的时光,我们的王子通过跳跃穿过墙壁的小洞.在高层建筑上进行攀爬和跳跃,还有在操作失误掉下高楼和触发必死机关后使用时之沙的时光倒流功能回归死亡之前 ...
随机推荐
- ubuntu14.04 下安装 gsl 科学计算库
GSL(GNU Scientific Library)作为三大科学计算库之一,除了涵盖基本的线性代数,微分方程,积分,随机数,组合数,方程求根,多项式求根,排序等,还有模拟退火,快速傅里叶变换,小波, ...
- ROS学习笔记(二) # ROS NodeHandles
1. 自动启动和关闭 ros::NodeHandle nh: 这段代码执行之后,如果内部节点还没有启动,ros::NodeHandle 会启动这个节点:一旦所有的 ros::NodeHandle 实例 ...
- Python中【__all__】的用法
Python中[__all__]的用法 转:http://python-china.org/t/725 用 __all__ 暴露接口 Python 可以在模块级别暴露接口: __all__ = [&q ...
- python2 与 python3 语法区别
python2 与 python3 语法区别 概述# 原稿地址:使用 2to3 将代码移植到 Python 3 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为 ...
- (DT系列五)Linux kernel 是怎么将 devicetree中的内容生成plateform_device【转】
转自:https://blog.csdn.net/lichengtongxiazai/article/details/38942033 Linux kernel 是怎么将 devicetree中的内容 ...
- C++:MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStart
在VS2013中Build一个C++程序报这个错,解决方案如下: 在解决方案管理器中选择该项目,项目/属性/连接器/系统/子系统 把控制台 (/SUBSYSTEM:CONSOLE)改为 窗口 (/SU ...
- 关于Mybatis的SQL映射文件中in关键字的用法
有一个需求是可以选择多个设备进行删除,于是想到将多个设备id拼成字符串作为参数,以逗号隔开,如:"123,234,456". SQL如下: <delete id=" ...
- Java基础:整型数组(int[]、Integer[])排序
Windows 10家庭中文版,java version "1.8.0_152",Eclipse Oxygen.1a Release (4.7.1a), 参考链接:http://w ...
- asp.net core 通过ajax上传图片及wangEditor图片上传
asp.net core 通过ajax上传图片 .net core前端代码,因为是通过ajax调用,首先要保证ajax能调用后台代码,具体参见上一篇.net core 使用ajax调用后台代码. 前端 ...
- OCM_第六天课程:Section3 —》数据库可用性
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...