2016-09-26 19 views
6

我正在使用ReliableActors進行服務結構項目的狀態。我保存並刪除了演員狀態中的事物,並且有一些我想測試的重新激活邏輯。服務結構 - 用於調試/測試目的的手動Actor取消激活

有沒有辦法手動停用或垃圾收集演員?我最好有一個測試將數據加載到演員中去激活它,然後運行一些函數以確保演員仍然按照預期運行。

回答

0

如果你的意思是當你說「取消」刪除,你可以使用以下命令:

await myActorServiceProxy.DeleteActorAsync(actorToDelete, cancellationToken) 

一個演員被激活,在第一時間呼叫到它的任何方法制成。如果未在可配置的時間段內使用actor,則會禁用actor(由Actors運行時收集的垃圾)。演員及其狀態也可以隨時手動刪除。

https://github.com/Azure/azure-content/blob/master/articles/service-fabric/service-fabric-reliable-actors-lifecycle.md

+0

我知道這一點,但是這也刪除了演員的狀態,而且不是我所需要的。 –

+0

您仍然可以使用「DeleteActorAsync」方法。想到的一個方法是,將州政府經理作爲您的測試的一部分。查看SDK 2.2(Actor依賴注入)中的新功能。公共類MockStateManager:IActorStateManager –

+0

不是我想要的那麼幹淨,但我會研究它,看看這是否能解決我的問題。謝謝! –

3

可以adjust演員被視爲閒置迫使更頻繁的垃圾收集的時間。從文檔代碼:

ActorRuntime.RegisterActorAsync<MyActor>((context, actorType) => 
     new ActorService(context, actorType, 
       settings: 
        new ActorServiceSettings() 
        { 
         ActorGarbageCollectionSettings = 
          new ActorGarbageCollectionSettings(idleTimeoutInSeconds: 20, scanIntervalInSeconds:20) 
        })) 
     .GetAwaiter() 
     .GetResult(); 

正如你可以看到,有兩個參數:idleTimeoutInSeconds - 這個時候,就是什麼也不做演員可以考慮停用之後; scanIntervalInSeconds - 服務結構將檢查角色不活動的時間間隔。

+1

idleTimeoutInSeconds必須等於或大於scanIntervalInSeconds – Gurpreet