簡體   English   中英

Service Fabric在啟動時生成actor

[英]Service Fabric spawn actor on startup

有沒有辦法要求系統在啟動時產生某些actor。

目前我在演員注冊后激活了Program.cs中我需要的演員集。

這工作正常,但我偶爾會得到一個ReminderLoadInProgressException因為正在激活的actor需要注冊一個提醒,但並非所有提醒都在它嘗試這樣做時被加載。

是否有種子集群的標准方法?

不,你需要一些東西來激活你的演員。

Program.cs不是最好的地方,因為它的執行並不真正與你服務的生命周期緊密相關,正如你可能已經注意到的那樣。

如果你需要在你的actor服務啟動時激活一些actor,那么一個好的地方就是你的actor服務的RunAsync方法。 您可以通過編寫從中派生的服務來自定義您的actor服務,與編寫有狀態服務時一樣:

編輯:確保你先調用並等待base.RunAsync()!

class MyActorService : ActorService
{
    public MyActorService(StatefulServiceContext context, ActorTypeInformation typeInfo, Func<ActorBase> newActor)
        : base(context, typeInfo, newActor)
    { }

    protected async override Task RunAsync(CancellationToken cancellationToken)
    {
        await base.RunAsync(cancellationToken);

        var proxy = ActorProxy.Create<IMyActor>(new ActorId(0));
        await proxy.StartDoingStuff();
    }
}

然后注冊您的actor服務,以便運行時知道使用它來托管您的actor實例:

static class Program
{
    private static void Main()
    {
        ActorRuntime.RegisterActorAsync<MyActor>(
            (context, actorType) => new MyActorService(context, actorType, () => new MyActor()))
            .GetAwaiter().GetResult();

        Thread.Sleep(Timeout.Infinite);
    }
}

只要確保actor方法是冪等的,因為這將在每次啟動actor服務的主副本時執行(在故障轉移,資源平衡,應用程序升級等之后),但是好處是它不會在你執行之前執行actor服務已准備就緒,它將始終在服務啟動時執行。

有關如何使用actor服務的更多信息,請參閱此處: https//azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-actors-platform/

無法評論所以我在這里發表評論:

為了完整起見:如果您的ActorService子類沒有默認名稱(來自ServiceManifest.xml - 例如您動態生成服務實例),則必須使用雙參數ActorProxy.Create重載,如下所示:

var actor = ActorProxy.Create<IMyActor>(new ActorId(0), this.Context.ServiceName);

否則你會得到“服務不存在”的例外:

System.Fabric.FabricServiceNotFoundException: Service does not exist. 
---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x80071BCD at
System.Fabric.Interop.NativeClient.IFabricServiceManagementClient4
.EndResolveServicePartition(IFabricAsyncOperationContext context)
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM