【问题标题】:Initializing Service Fabric Actors using DataPackages使用 DataPackage 初始化 Service Fabric Actor
【发布时间】:2023-03-22 12:52:01
【问题描述】:

我正在使用 Azure Service Fabric 构建概念验证应用程序,并希望在集群启动时初始化一些“演示”用户参与者。我发现一些简短的文章讨论了从 DataPackage 加载数据,其中展示了如何加载数据本身,但没有介绍如何从这些数据创建参与者。

这可以通过 DataPackages 完成还是有更好的方法来完成?

【问题讨论】:

    标签: c# azure-service-fabric


    【解决方案1】:

    数据包只是不透明的目录,其中包含每次部署所需的任何文件。它本身不会加载或处理数据,您必须完成所有繁重的工作,因为只有您的代码知道数据的含义。例如,如果您有一个名为“SvcData”的数据包,它将在部署期间部署该包中的文件。如果您在该目录中有一个文件 StaticDataMaster.json,那么您可以在服务运行时访问它(在您的演员中或其他地方)。例如:

    // get the data package
    var DataPkg = ServiceInitializationParameters.CodePackageActivationContext.
        GetDataPackageObject("SvcData");
    
    // fabric doesn't load data it is just manages for you. data is opaque to Fabric
    var customDataFilePath = DataPkg.Path + @"\StaticDataMaster.json";   
    
    // TODO: read customDatafilePath, etc.
    

    【讨论】:

    • 对,我知道它只是我可以加载的目录中的一个文件(如您上面的示例所示)。问题更多是关于如何在将 SF 包部署到集群中时从该演示数据创建 Actors。在这个过程中是否有一个点可以让我创建和初始化演示演员?这可以在 Actor 构造函数中完成,OnActivateAsync 方法(但这仅在激活 Actor 时触发;是否为时已晚?)
    • 您必须有一个服务来查看数据包中的数据并通过使用 ActorProxy 调用它们来创建演员。没有自动创建单个演员的内置机制。
    • @kyko 演员有一个接口/合同。您可以添加一个方法来注入数据。可选地,您可以直接使用状态管理器。在某些时候,您需要请求演员做某事。正是在这一点上,演员被创造出来。因此,在这方面,通过构造函数获取数据可能行不通。也没有什么能阻止您通过 actor 上的方法传递数据。
    • @PeterRitchie 我想我需要做的是加载数据包并将其存储在私有变量中。然后,在 OnActivateAsync 方法被调用时,检查 actor 的状态是否已经被初始化。如果没有,则检查“演示”数据以查看 ActorID 是否存在并从该数据初始化演员并保存状态。似乎我以后可以采用相同的方法从远程存储(例如 DocumentDB)加载数据,而不是使用数据包。这看起来像是一种“正确”的方法吗?
    • 你不知道你的actor会跑到哪里(使用它们的原因之一)但是如果你用“状态管理器”替换“私有变量”,我想你会得到你想要的
    猜你喜欢
    • 2017-07-19
    • 2018-07-17
    • 2016-03-11
    • 2018-01-11
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2015-09-06
    相关资源
    最近更新 更多