|
|
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
分享:
大家都在看
猜你喜欢

读 书 +更多

C++编程你也行

本书是一本优秀的C++教材,内容包括:基础类型、操作符和简单变量,循环和决策,命名空间和C++标准库,用C++编写函数,行为、序列点和求值...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊