我有一个群集跨区域,我想指定首选域。问题是查看https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-resource-manager-advanced-placement-rules-placement-policies中的示例代码,我不知道serviceDescription来自哪里。任何人都知道我的服务结构服务代码库中应该有哪些代码?
此外,是否有类似的方法在服务结构清单文件中指定它而不是代码更改(就像人们如何指定前端/后端放置一样)?
谢谢,
答案 0 :(得分:1)
使用此代码更改服务说明:
FabricClient fabricClient = new FabricClient();
StatefulServiceDescription serviceDescription = new StatefulServiceDescription();
serviceDescription.PlacementConstraints = "(HasSSD == true && SomeProperty >= 4)";
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);
(来源here)
根据XSD,您可以将它们定义为xml,类似于放置约束。
C:\ Program Files \ Microsoft SDKs \ Service Fabric \ schemas \ ServiceFabricServiceModel.xsd
答案 1 :(得分:0)
根据MS Docs,您当然可以按代码配置它,如下所示:
FabricClient fabricClient = new FabricClient();
StatefulServiceDescription serviceDescription = new StatefulServiceDescription();
serviceDescription.PlacementConstraints = "(HasSSD == true && SomeProperty >= 4)";
// add other required servicedescription fields
//...
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);
关于您从何处执行此操作的问题-根据您的需要,有几种选择:
New-ServiceFabricService
来运行)
这种方法的问题在于,对于开发人员来说,在每次部署后都必须运行此操作有点烦人-因此我更喜欢:<DefaultServices>
中的ApplicationManifest.xml
内放置一个条目)。然后,您可以在此服务中使用FabricClient
,策略,指标来实例化/修改展示位置约束,并通过应用程序参数/配置来驱动这些约束partition_id = random_number % pool size
)的地方,此方法特别有用。您还可以通过应用程序参数配置放置约束declaratively。不幸的是,这似乎不适用于展示位置政策的atm(而且可能也不适用于metrics)。
如果您的需求很简单,那么声明方法可能是最简单的!按照上面的链接,在您的应用清单文件中添加一个[Stateless1_InstanceCount]
参数,并将其放在默认服务下:
<DefaultServices>
<Service Name="Stateless1">
<StatelessService ServiceTypeName="Stateless1Type" InstanceCount="[Stateless1_InstanceCount]">
<SingletonPartition />
<PlacementConstraints>[Stateless1_PlacementConstraints]</PlacementConstraints>
</StatelessService>
</Service>
</DefaultServices>