2017-05-22 4 views
2

Documentationは言う:サービスファブリックリマインダー

アラームは、指定された時間に俳優に永続的なコールバックをトリガするメカニズムです。それらの機能はタイマーに似ています。しかし、タイマーとは異なり、リマインダーは、アクターが明示的に登録解除するか、アクターが明示的に削除されるまで、あらゆる状況下でトリガーされます。具体的には、アクターのランタイムはアクターのリマインダーに関する情報を保持するため、アクターの非アクティブ化とフェイルオーバーでリマインダーがトリガーされます。

のは、私たちは1時間後に実行するように設定リマインダーを持っていますが、俳優は10分のアイドルタイムアウトとのスキャン間隔を持って、2分(俳優のActorGarbageCollectionSettingsでセットを)言う。言ってみましょう

最初の15分後に何が起こるのですか?その俳優はアイドル状態ですので、GCが終了し、非アクティブになります。後で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

のは、私たちは1時間後に実行するように設定リマインダーを持っていると言うが、俳優はのアイドルタイムアウトを持っています10分、スキャン間隔、たとえば2分(アクタのActorGarbageCollectionSettingsで設定)。俳優はとてもアイドル状態にある最初の15分後に何が起こる

何が起こることはAzureのサービスファブリックで必要とデリマインダコードがあるときに俳優が自動的に活性化されること..ですGC'dと無効です実行される。アクターフレームワーク(OnActivateAsync/OnDeactivateAsync)によって提供されるイベントと仮想メソッドを使用すると、追跡が簡単です。実際、私はrepoを持っています。これは、EventSourceベースのロギングメカニズムを使っていることを正確に示しています。

ASFがタイマーとリマインダを実際に追跡する方法については、私たちは推測することができますが、プロジェクトをオープンソース化しているので、source codeで既に調べることができます。

EDIT:私はConcurrentDictionaryに特定ActorIdの全てのリマインダを追跡ActorManagerがありhttps://github.com/Azure/service-fabric-services-and-actors-dotnet/blob/develop/src/Microsoft.ServiceFabric.Actors/Runtime/ActorReminder.cs

を参照してください、それは内部タイマーを使用しています参照してください。

編集2:それは明示的にあなたがあなたの質問に追加docsに記載されています

アラームは指定した時間に俳優の永続的なコールバックをトリガするメカニズムです。それらの機能はタイマーに似ています。しかし、タイマーとは異なり、リマインダーは、アクターが明示的に登録解除するか、アクターが明示的に削除されるまで、あらゆる状況下でトリガーされます。具体的には、リマインダーはアクターの無効化を介して起動され、はアクターのランタイムがアクターのリマインダーに関する情報を保持するため、フェイルオーバーします。

+0

ああ私の言葉!それは華麗です。これに感謝し、ライブラリから適切なソースをリンクしてください。私に時間のロードを救った! :) – Mardoxx