DAPR Actor生命周期:优雅停止的通知机制实现问询
DAPR Actor停用前通知机制解决方案
DAPR Actor框架提供了**OnDeactivateAsync**生命周期方法,这就是你需要的Actor停用前的通知钩子。当Actor因闲置超时被自动停用、被手动调用停用接口,或者因集群重定位需要销毁实例时,这个方法会被触发执行,正好用来清理你的长时间运行Worker。
修改你的TenantActor类,用OnDeactivateAsync替代示例中的StopActor方法即可:
// there can be only one TenantActorWorker // services.AddTransient<ITenantWorker, TenantActorWorker>(); public class TenantActor : Actor { private ITenantWorker _worker; public TenantActor(ActorHost host, ITenantWorker worker) : base(host) { this._worker = worker; } public void Process(String tenantId) { _worker.WakeUpOrStartFor(tenantId); } // Actor停用前会自动调用这个方法 protected override Task OnDeactivateAsync(CancellationToken cancellationToken) { _worker.Cancel(); // 如果Worker的Cancel是异步操作,这里要await对应的方法 // await _worker.CancelAsync(cancellationToken); return Task.CompletedTask; } }
需要注意:
OnDeactivateAsync是异步方法,必须返回Task,如果你的Worker取消操作是异步的,记得用await等待完成- 方法参数中的
cancellationToken是框架传递的停用超时令牌,可用于确保清理操作在规定时间内完成,避免Actor销毁被阻塞
内容的提问来源于stack exchange,提问作者Zoltan Hernyak
相关产品推荐
相关产品推荐

