|
|
51CTO旗下网站
|
|
移动端

2.3.6.2 服务生命周期概述

《Microsoft Azure 管理与开发(下册)平台服务PaaS》本书由世纪互联蓝云Microsoft Azure 开发技术支持团队的资深工程师们编写,主要阐述MicrosoftAzure PaaS 服务的开发应用,涉及计算服务、集成认证服务、数据存储服务、大数据服务等方面的内容。本节为服务生命周期概述。

作者:世纪互联蓝云公司来源:电子工业出版社|2018-07-12 18:01

2.3.6.2 服务生命周期概述

Reliable Actors 的Actor 是虚拟的,在平台中,Actor 并不是一直存在的,只有当请求访问Actor 时,Reliable Actors 才会创建激活Actor。当Actor 处于空闲状态下,Reliable Actors会回收Actor,回收并不代表删除Actor,Reliable Actors 还会保持Actor 的注册信息,依然可以请求服务到此Actor,当再次有请求时,还可以重新激活。这表示Reliable Actors 会自动维护Actor 对象的创建和销毁。

虽然Reliable Actors 隐式的创建和销毁Actor 对象,但在Actor 类里也预留了OnActivateAsync 和onDeactivateAsync 事件的接口,以便开发者在Actor 对象激活和销毁的时候,可以处理一些业务逻辑。如以下代码:

  1. protected override Task OnActivateAsync()  
  2. {  
  3. ActorEventSource.Current.ActorMessage(this, "Actor activated.");  
  4. return this.StateManager.TryAddStateAsync("count", 0);  
  5. }  
  6. protected override Task OnDeactivateAsync()  
  7. {  
  8. ActorEventSource.Current.ActorMessage(this, "Actor deactivated.");  
  9. return this.StateManager.TryRemoveStateAsync("count");  

当停用某个Actor 时,Reliable Actors 将释放该Actor 对象的应用和内存,但并不会清除该Actor 的状态管理器中的状态。当下次激活时,将创建一个新的Actor 对象实例,并还原其状态。一般Actor 的停用是由Reliable Actors 的垃圾回收机制来触发的,系统会定时检查Actor 的空闲时间,如果空闲时间超出设置的值,就会将此空闲的Actor 回收。ReliableActors 的垃圾回收机制提供以下两个事件参数,以便开发者自己定义垃圾回收的执行规则。

(1) 扫描事件间隔:Reliable Actors 垃圾回收扫描Actor 的时间间隔,默认是1 分钟。

(2) 空闲超时:空闲Actor 的保持未使用状态***时间,超出将执行回收,默认是60 分钟。

通常不需要修改这些值,但也可以根据自己的需要进行调整。调整方式是可以在注册Actor 时,设置ctorServiceSettings。示例代码:

  1. ActorRuntime.RegisterActorAsync<Actor1>((context, actorType) => 
  2. new ActorService(context, actorType,  
  3. settings:  
  4. new ActorServiceSettings()  
  5. {  
  6. ActorGarbageCollectionSettings =  
  7. new ActorGarbageCollectionSettings(10, 2)  
  8. })).GetAwaiter().GetResult(); 

垃圾回收或者停用只会释放Actor 对象,但不会删除该Actor 的状态管理器下的数据。如果不需要某个Actor,并想要清理该Actor 状态管理器下的数据,这时就需要使用删除操作,来清除Reliable Actors 中关于该Actor 的所有数据。可以在远程调用删除方法,如下代码:

  1. ActorId actorToDelete = new ActorId(id);  
  2. IActorService myActorServiceProxy = ActorServiceProxy.Create(  
  3. new Uri("fabric:/MyApp/MyService"), actorToDelete);  
  4. await myActorServiceProxy.DeleteActorAsync(actorToDelete,  
  5. cancellationToken) 

当删除时,如果Actor 处于活动状态,会先将Actor 停用,之后在执行***删除操作。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

Java for Flash动态网站开发手札

本书深入浅出地说明了如何利用Java、Flash及XML进行Flash富媒体应用程序的开发。 本书知识丰富,内容结构合理,包括:Flash影片应用程序与...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客