服务面料提醒

文件说:

提醒是一种在指定时间触发actor上的持久回调的机制。 它们的function类似于计时器。 但与计时器不同的是,在所有情况下都会触发提醒,直到演员明确地取消注册或明确删除演员。 具体而言,由于Actors运行时会保留有关actor的提醒的信息,因此会在actor停用和故障转移时触发提醒。

假设我们有一个提醒设置在1h后运行,但是Actor的空闲超时为10分钟,扫描间隔为2分钟(在actor的ActorGarbageCollectionSettings )。

在演员空闲的前15分钟之后会发生什么,所以是GC并取消激活..那么如何知道在45分钟后重新创建演员? 它是如何知道用于创建Actor的actor ID?

请求因为我想知道这些模式是如何工作的:

https://www.codit.eu/blog/2016/08/25/how-to-enable-automatic-scheduling-in-service-fabric-actors/

https://dajbych.net/azure-service-fabric-scheduled-tasks

假设我们有一个提醒设置在1h后运行,但是Actor的空闲超时为10分钟,扫描间隔为2分钟(在actor的ActorGarbageCollectionSettings中设置)。

在演员空闲的前15分钟后会发生什么,所以GC已经停用了..

发生的情况是,Azure Service Fabric需要时会自动激活actor,并执行de remder代码。 使用actor框架(OnActivateAsync / OnDeactivateAsync)提供的事件和虚拟方法,这很容易跟踪。 事实上,我有一个使用基于EventSource的日志记录机制准确显示的回购 。

至于ASF如何实际跟踪定时器和提醒我们只能猜测,他们是开源项目,所以也许你已经可以查看源代码 。

编辑 :我看到它在内部使用了一个计时器,请参阅https://github.com/Azure/service-fabric-services-and-actors-dotnet/blob/develop/src/Microsoft.ServiceFabric.Actors/Runtime/ActorReminder.cs

有一个ActorManager可以跟踪ConcurrentDictionary特定ActorId的所有提醒。

编辑2 :在您在问题中添加的文档中明确说明:

提醒是一种在指定时间触发actor上的持久回调的机制。 它们的function类似于计时器。 但与计时器不同的是,在所有情况下都会触发提醒,直到演员明确地取消注册或明确删除演员。 具体而言,由于Actors运行时会保留有关actor的提醒的信息,因此会在actor停用和故障转移触发提醒。