我正在开发一个小的演员系统,当演员层次 struct 中出现问题时,我希望关闭所有演员并重新启动顶级演员,这样一切都从一个干净的状态开始.
我可以很容易地做到这一点,在中间参与者中实现监督策略来升级错误,然后让顶级参与者重新启动.然而,正如this video中所描述的,重新启动并不清除actors邮箱,我想这样做是为了真正确保一切都重新开始.
到目前为止,我还没有找到任何关于如何清理邮箱的文档,所以我甚至不确定这是否可能.
然而,由于我不想只是重新启动,而是有一些延迟,我查看了BackoffSupervisor
.据我所知,当一个演员被BackoffSupervisor
分重启时,它实际上并没有重新启动,而是在退避期间停止,然后重新启动,这意味着它的邮箱实际上是被清除的,正如我所希望的那样.这个解决方案对我有效,但我想确保这个行为是故意这样的,并且我可以在这个用例中依赖它.
可能不太相关,但作为参考,以防万一,我就是这样创建这个主管的:
return BackoffSupervisor.Props(
Backoff.OnFailure(
rootActorProps,
childName: nameof(RootActor),
minBackoff: TimeSpan.FromSeconds(1),
maxBackoff: TimeSpan.FromMinutes(5),
randomFactor: 0.2,
-1));
所以,概括地说,我的疑问是:
- 有没有可能以某种方式清理演员的邮箱?
- 使用
BackoffSupervisor
是获取邮箱的有效方法,其他一切都以干净的状态重新启动