Напоминания Service Fabric

Документация< /а> говорит:

Напоминания — это механизм, запускающий постоянные обратные вызовы актера в указанное время. Их функциональность аналогична таймерам. Но в отличие от таймеров, напоминания срабатывают при любых обстоятельствах, пока действующее лицо явно не отменит их регистрацию или действующее лицо не будет удалено явным образом. В частности, напоминания запускаются при деактивации и отработке отказа субъекта, поскольку среда выполнения субъектов сохраняет информацию о напоминаниях субъекта.

Допустим, у нас есть напоминание, настроенное на запуск через 1 час, но у актера есть тайм-аут простоя 10 минут и интервал сканирования, скажем, 2 минуты (установлено в ActorGarbageCollectionSettings актера).

Что происходит после первых 15 минут, когда Актер бездействует, поэтому он GC'ируется и деактивируется.. так как же он узнает, что воссоздать актера через 45 минут? И как он узнает, какой 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


person Mardoxx    schedule 22.05.2017    source источник


Ответы (1)


Допустим, у нас есть напоминание, настроенное на запуск через 1 час, но у Актера есть тайм-аут простоя, равный 10 минутам, и интервал сканирования, скажем, 2 минуты (установлено в ActorGarbageCollectionSettings актера).

Что происходит после первых 15 минут, когда Актер простаивает, поэтому он GC'ируется и деактивируется.

Что происходит, так это то, что субъект автоматически активируется, когда это необходимо для Azure Service Fabric, и выполняется код напоминания. Используя события и виртуальные методы, предоставляемые инфраструктурой субъектов (OnActivateAsync/OnDeactivateAsync), это легко отследить. На самом деле, у меня есть репозиторий, который показывает именно это, используя ведение журнала на основе EventSource. механизм.

Что касается того, как ASF на самом деле отслеживает таймеры и напоминания, мы можем только догадываться, они являются открытым исходным кодом проекта, поэтому, возможно, вы уже можете найти его на исходный код.

EDIT: я вижу, что он использует внутренний таймер, см. https://github.com/Azure/service-fabric-services-and-actors-dotnet/blob/develop/src/Microsoft.ServiceFabric.Actors/Runtime/ActorReminder.cs

Существует ActorManager, который отслеживает все напоминания о конкретном ActorId в ConcurrentDictionary.

Изменить 2: это явно указано в документы, которые вы добавили в свой вопрос:

Напоминания — это механизм, запускающий постоянные обратные вызовы актера в указанное время. Их функциональность аналогична таймерам. Но в отличие от таймеров, напоминания срабатывают при любых обстоятельствах, пока действующее лицо явно не отменит их регистрацию или действующее лицо не будет удалено явным образом. В частности, напоминания активируются при деактивации и переходе на другой ресурс субъекта, поскольку среда выполнения субъектов сохраняет информацию о напоминаниях субъекта.

person Peter Bons    schedule 22.05.2017
comment
Ах, мое слово! Это блестяще. Большое спасибо за это и ссылку на соответствующий источник из их библиотек. Сэкономил мне кучу времени! :) - person Mardoxx; 22.05.2017