服务结构提醒

Mar*_*oxx 5 c# reminders azure azure-service-fabric

文档说:

提醒是一种在指定时间触发参与者持久回调的机制。它们的功能类似于计时器。但与计时器不同的是,在所有情况下都会触发提醒,直到参与者明确取消注册它们或明确删除参与者为止。具体来说,由于 Actor 运行时会保留有关 Actor 提醒的信息,因此在 Actor 停用和故障转移期间会触发提醒。

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

前 15 分钟后会发生什么情况,Actor 处于空闲状态,因此被 GC 并停用。那么它如何知道 45 分钟后重新创建 Actor?它如何知道使用什么 Actor ID 来创建 Actor?

问这个问题是因为我想知道这些模式是如何工作的:

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

Pet*_*ons 3

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

前 15 分钟后会发生什么情况,Actor 处于空闲状态,因此被 GC 并停用。

所发生的情况是,当 Azure Service Fabric 需要时,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可以跟踪.ActorIdConcurrentDictionary

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

提醒是一种在指定时间触发参与者持久回调的机制。它们的功能类似于计时器。但与计时器不同的是,在所有情况下都会触发提醒,直到参与者明确取消注册它们或明确删除参与者为止。具体来说,由于 Actor 运行时会保留有关 Actor 提醒的信息,因此在 Actor 停用和故障转移期间会触发提醒。