2017-05-22 97 views
2

Documentation說:服務織物提醒

提醒是在指定的時間觸發一個演員持續回調的機制。它們的功能與定時器類似。但是與定時器不同的是,在所有情況下都會觸發提醒,直到演員明確取消註冊或演員被明確刪除。具體而言,由於演員運行時存在關於演員提醒的信息,因此會在演員停用和故障轉移之間觸發提醒。

比方說,我們設置了提醒後1h運行,但演員有10分鐘的空閒超時和掃描間隔,說2分鐘(中集演員的ActorGarbageCollectionSettings)。

在第一個15分鐘之後,演員閒置,所以GC'd和停用。所以如何知道在45分鐘後重新創建演員?它如何知道用什麼角色ID來創建Actor?

問becasue我想知道這些模式是如何工作的:

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

回答

1

比方說,我們設置了提醒後1h運行,但該演員有一個空閒超時10分鐘和掃描間隔,比如2分鐘(在演員的ActorGarbageCollectionSettings中設置)。

第15分鐘的演員是空閒所以後會發生什麼是GC'd和停用..

什麼情況是,需要通過Azure的服務結構時,和去提醒代碼是演員被自動激活執行。使用actor框架提供的事件和虛擬方法(OnActivateAsync/OnDeactivateAsync),這很容易跟蹤。實際上,我有一個repo,它完全顯示了使用基於EventSource的日誌記錄機制。

至於ASF如何實際跟蹤定時器和提醒,我們只能猜測,他們是開源的項目,所以也許你已經可以在source code查找它。

編輯:我看到它採用的是定時器內部,看到https://github.com/Azure/service-fabric-services-and-actors-dotnet/blob/develop/src/Microsoft.ServiceFabric.Actors/Runtime/ActorReminder.cs

有一個ActorManager一個跟蹤特定ActorId的所有提醒在ConcurrentDictionary

編輯2:這是你在你的問題中新增的docs明確指出:

提醒是在指定的時間觸發一個演員持續回調的機制。它們的功能與定時器類似。但是與定時器不同的是,在所有情況下都會觸發提醒,直到演員明確取消註冊或演員被明確刪除。具體來說,提示會在演員停用和故障轉移之間觸發,因爲Actors運行時會保留有關演員提醒的信息。

+0

啊我的話!這太棒了。非常感謝這一點,並從他們的圖書館鏈接適當的來源。爲我節省了很多時間! :) – Mardoxx