按部署位置配置 Service Fabric 参与者和服务逻辑
Configure Service Fabric actor and service logic by deployment location
Azure Service Fabric 应用程序有一个 ApplicationParameters 文件夹,其中包含针对不同部署位置的 XML 配置文件。这些文件中的设置似乎与所包含的参与者和服务的 instances/partitions 数量有关;我还没有看到这些设置影响参与者或服务逻辑的示例。
此外,可靠的服务和可靠的参与者可以在 ServiceManifest.xml 文件中指定配置包,该文件指向包含 Settings.xml 文件的文件夹。您可以在 Settings.xml 中创建自定义配置部分,并通过 ServiceInitializationParameters.CodePackageActivationContext.GetConfigurationPackageObject() 服务“s/actor”的配置包访问它们。与应用程序级别的配置不同,这些配置文件似乎并不容易针对特定的部署位置。
通过针对部署位置的配置文件定制 actor/service 逻辑的正确方法是什么?例如,如果您的服务依赖于具有不同 URL 的外部 API,用于开发环境和生产环境,如何使用配置文件轻松建立这些 URL?如果 ApplicationParameters 文件是答案,您如何以编程方式从参与者或服务访问此信息?如果 Settings.xml 文件中的自定义部分是答案,那么 actor/service 如何知道它在哪个环境中?
查看此处的 "Per-environment service configuration settings" 部分:Managing application parameters for multiple environments。
简而言之,您可以在将服务清单导入应用程序清单时创建一个ConfigOverride
。假设您在 Stateful1
服务的 Settings.xml 中有以下设置:
<Section Name="MyConfigSection">
<Parameter Name="MaxQueueSize" Value="25" />
</Section>
在应用程序清单中,您将指定以下内容:
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Stateful1Pkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="MyConfigSection">
<Parameter Name="MaxQueueSize" Value="[Stateful1_MaxQueueSize]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
然后您可以使用应用程序参数为 MaxQueueSize
指定 application/environment-specific 值。
Azure Service Fabric 应用程序有一个 ApplicationParameters 文件夹,其中包含针对不同部署位置的 XML 配置文件。这些文件中的设置似乎与所包含的参与者和服务的 instances/partitions 数量有关;我还没有看到这些设置影响参与者或服务逻辑的示例。
此外,可靠的服务和可靠的参与者可以在 ServiceManifest.xml 文件中指定配置包,该文件指向包含 Settings.xml 文件的文件夹。您可以在 Settings.xml 中创建自定义配置部分,并通过 ServiceInitializationParameters.CodePackageActivationContext.GetConfigurationPackageObject() 服务“s/actor”的配置包访问它们。与应用程序级别的配置不同,这些配置文件似乎并不容易针对特定的部署位置。
通过针对部署位置的配置文件定制 actor/service 逻辑的正确方法是什么?例如,如果您的服务依赖于具有不同 URL 的外部 API,用于开发环境和生产环境,如何使用配置文件轻松建立这些 URL?如果 ApplicationParameters 文件是答案,您如何以编程方式从参与者或服务访问此信息?如果 Settings.xml 文件中的自定义部分是答案,那么 actor/service 如何知道它在哪个环境中?
查看此处的 "Per-environment service configuration settings" 部分:Managing application parameters for multiple environments。
简而言之,您可以在将服务清单导入应用程序清单时创建一个ConfigOverride
。假设您在 Stateful1
服务的 Settings.xml 中有以下设置:
<Section Name="MyConfigSection">
<Parameter Name="MaxQueueSize" Value="25" />
</Section>
在应用程序清单中,您将指定以下内容:
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Stateful1Pkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="MyConfigSection">
<Parameter Name="MaxQueueSize" Value="[Stateful1_MaxQueueSize]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
然后您可以使用应用程序参数为 MaxQueueSize
指定 application/environment-specific 值。