在服务结构应用程序中动态创建服务

upI*_*oud 2 azure azure-service-fabric service-fabric-actor service-fabric-stateless

这有点描述性,所以请耐心等待。:)

在我尝试构建的应用程序中,产品具有不同的功能。用户可以选择加入功能 A、B、D 但不是 C。我构建这个的方式是,每个不同的功能都是一个服务(无状态,我正在考虑将数据存储在 Azure SQL 中数据库和从每个服务公开 REST API)。将所有服务捆绑在一起是一个 ApplicationType。对于创建的每个客户租户(将其视为一组用户的共享帐户),我正在考虑使用 TenantManagementService 创建注册 ApplicationType 的新具体实例并调用client.ApplicationManager.CreateApplicationAsync()FabricClient实例,以便我可以在我的节点上为该租户运行一个专用的应用程序实例。但是,正如我所提到的,租户可以选择仅针对映射到服务子集的特定功能选择加入。如果租户仅选择我的应用程序的服务 A,则对应于功能 B、C、D 的其余服务实例不应在节点上空闲运行。

我想为每个服务创建参与者,但我创建的服务是无状态的,我希望它们的多个实例在多个节点上积极运行以平衡负载,而不是有状态服务的空闲副本。

与我对应用程序类型所做的类似,即在新租户注册时生成应用程序类型,我可以在租户想要选择加入/退出产品功能时生成/删除服务吗?

这是我尝试过的:InstanceCount在打包应用程序时,我尝试将服务设置为0。在我的ApplicationParametersXML 文件中:

<Parameters>
    <Parameter Name="FeatureAService_InstanceCount" Value="0" />
    <Parameter Name="FeatureBService_InstanceCount" Value="0" />
</Parameters>
Run Code Online (Sandbox Code Playgroud)

但是,Service Fabric Explorer 在从此类应用程序类型实例化应用程序时会出现问题。错误是这样的: 零服务实例计数错误

但另一方面,当一个服务部署在结构上时,它给了我一个专门删除它的选项,所以这个场景应该是有效的。 在此处输入图片说明

欢迎任何建议!

编辑:我的要求类似于这里的 anderso 提到的方法 - /sf/answers/2467384461/,但是,我特别想解决的问题是上传创建一个应用程序实例或更多具有零实例计数的打包服务!

小智 5

@uplnCloud

我希望我理解一切正确。

你的情况如下:

  • 每个客户都应该有单独的应用程序(从同一个创建ApplicationType)。
  • 每个客户应该只有服务的子集(在 中定义ApplicationType)。

如果我做对了,那么这是开箱即用的支持。

首先,您应该<DefaultServices />ApplicationManifest.xml. 这将指示 Service Fabric 不使用应用程序自动创建服务。

现在算法如下:

  1. 使用创建应用程序 FabricClient.ApplicationManager.CreateApplicationAsync()
  2. 为每个需要的功能创建一个新的对应服务使用FabricClient.ServiceManager.CreateServiceAsync()(您需要指定新创建的应用程序的应用程序名称)

另请注意,CreateServiceAsync()接受ServiceDescriptor您可以配置所有与服务相关的参数 - 从分区架构开始到实例计数结束。