【问题标题】:Long-running service fabric actor reminder callback长时间运行的服务结构参与者提醒回调
【发布时间】:2021-03-03 02:16:07
【问题描述】:

我有一个 SF actor 服务,其工作方式大致如下:

  1. RunAsync 中启动时,服务会创建一组预定义的actor,并通过调用一个空的StartAsync 方法(在IActor 派生的自定义接口上定义)激活所有这些actor。
  2. 每个参与者都会覆盖 OnActivateAsync,在其中注册提醒,dueTimeperiod 都设置为 10 秒。
  3. 演员在IRemindable.ReceiveReminderAsync 实现中完成所有工作。这项工作通常很快(约 100 毫秒),但有时可能会持续几分钟(我知道这是糟糕的设计,请不要对此发表评论:-))。

我的问题是:提醒到期时会发生什么,但演员仍然执行之前的回调代码?

According to the documentation,回调是排队的,但我也想知道队列是否以某种方式受到限制,达到限制时会发生什么?

感谢您的反馈!

帕洛

【问题讨论】:

    标签: azure-service-fabric service-fabric-actor service-fabric-on-premises


    【解决方案1】:

    我浏览了 SF Actors 框架源代码 (ActorReminder.cs) 并找到了答案(感谢开源的美丽 :-):

    当提醒到期,但参与者仍然执行之前的回调代码时会发生什么?

    实际上,这永远不会发生。原因是ActorReminder 类使用System.Threading.Timer 类通过Change 方法重载来触发提醒,该方法使用Timeout.InfiniteTimeSpan 作为其period 参数。这意味着您的提醒回调可以执行几个小时,SF 会很高兴地等待它完成而不会抱怨。提醒回调完成后,ActorReminder 将在您注册提醒时指定的到期时间“重新启动”计时器。

    这也意味着没有排队提醒回调之类的东西,这显然回答了我的第二个问题:-)。

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 2018-01-17
      • 2020-09-08
      • 2018-04-11
      • 2016-06-17
      • 2016-06-12
      • 2017-12-08
      • 2017-07-09
      • 2016-04-10
      相关资源
      最近更新 更多