【问题标题】:Azure Service Fabric Actor InitializationAzure Service Fabric Actor 初始化
【发布时间】:2017-07-19 22:06:25
【问题描述】:

如何在创建时初始化 Azure Service Fabric Actor?

我尝试使用初始化方法重载actor构造函数,但没有成功。

必须在创建actor后从客户端调用初始化方法,还是有办法让actor在创建时自动初始化?

【问题讨论】:

    标签: c# .net azure azure-service-fabric service-fabric-actor


    【解决方案1】:

    当您在其上调用方法时,首先会创建一个 Actor。因此,如果您需要初始化一个尚不存在的 Actor,您需要确保它首先处于活动状态。它自己做不到。

    您可以创建一个方法来初始化 Actor 并使其成为 Actor 接口的一部分。

    您还可以使用OnActivateAsync 方法,该方法将在每次激活时触发。

    阅读有关 Actor 生命周期的更多信息here

    【讨论】:

    • 我想做的是在使用 ActorProxy 创建演员后调用我的“初始化”自定义方法。我尝试使用构造函数重载:public MyActor(ActorService service, ActorId id) : base(service, id) { InitializeActor(); },但它不起作用。所以在actor创建后调用“Initialize”方法的唯一方法是从actor外部IMyActor myActor = ActorProxy.Create<IMyActor>("myActor"); myActor.InitializeActor();或者使用OnActivateAsync方法,对吧?
    • 从构造函数调用它应该可以工作。但是调用构造函数的唯一方法是在 Actor 被激活时。这是通过对其调用操作来实现的。
    【解决方案2】:

    Actor 框架在首次创建 Actor 和激活已停用并处于休眠状态的 Actor 之间没有太大区别。这两个动作都会创建一个新的 Actor 实现实例(调用 .ctor),然后调用 OnActivateAsync。它在执行分派给 Actor 的任何方法之前执行此操作。如果不调用 Actor 接口上的方法,就无法创建 Actor 的实例,这都是底层 ActorBaseActorManager 消息处理的一部分。

    此外,根据您为 Actor 选择的持久性类型(NoneVolatilePersisted),托管 Actor 的 ActorService 存储一个持久性密钥,其中 IActorStateProvider 与 Actor 关联/演员服务。这也是 ActorService 如何“了解”它的演员的方式。当你向 ActorService 询问已知 Actor 时,它会查询它的 StateProvider 以获取

    如果您想第一次运行一些初始化代码,并且仅在第一次激活 Actor 时,您可以在 OnActivateAsync 中为该 Actor 添加状态键:

        protected override async Task OnActivateAsync()
        {
            ActorEventSource.Current.ActorMessage(this, "Actor activated.");
    
            var initialized = await  this.StateManager.ContainsStateAsync("initalized");
            if (!initialized) await Initialize();
        }
    
        private async Task Initialize()
        {
            ActorEventSource.Current.ActorMessage(this, "Actor initialized.");
    
            await this.StateManager.AddStateAsync("initialized", true);
        }
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2018-07-17
      • 2017-07-14
      • 2016-09-19
      • 2016-11-08
      • 2016-03-11
      • 2018-01-11
      • 2018-09-16
      • 2016-10-31
      相关资源
      最近更新 更多