Azure service fabric 按部署位置配置服务结构参与者和服务逻辑

Azure service fabric 按部署位置配置服务结构参与者和服务逻辑,azure-service-fabric,Azure Service Fabric,Azure Service Fabric应用程序有一个ApplicationParameters文件夹,其中包含针对不同部署位置的XML配置文件。这些文件中的设置似乎处理所包含的参与者和服务的实例/分区的数量;我没有看到这些设置影响参与者或服务逻辑的示例 此外,可靠服务和可靠参与者可以在ServiceManifest.xml文件中指定配置包,该文件指向包含Settings.xml文件的文件夹。您可以在Settings.xml中创建自定义配置节,并通过ServiceInitializationPa

Azure Service Fabric应用程序有一个ApplicationParameters文件夹,其中包含针对不同部署位置的XML配置文件。这些文件中的设置似乎处理所包含的参与者和服务的实例/分区的数量;我没有看到这些设置影响参与者或服务逻辑的示例

此外,可靠服务和可靠参与者可以在ServiceManifest.xml文件中指定配置包,该文件指向包含Settings.xml文件的文件夹。您可以在Settings.xml中创建自定义配置节,并通过ServiceInitializationParameters.CodePackageActivationContext.GetConfigurationPackageObject()通过服务的/actor配置包访问这些节。与应用程序级别的配置不同,这些配置文件似乎不容易针对特定的部署位置

通过以部署位置为目标的配置文件定制参与者/服务逻辑的正确方法是什么?例如,如果您的服务依赖于具有不同URL的外部API进行开发和生产环境,那么如何使用配置文件轻松建立这些API?如果ApplicationParameters文件就是答案,那么如何通过编程从参与者或服务访问此信息?如果Settings.xml文件中的自定义部分是答案,那么参与者/服务如何知道它所处的环境?

请查看此处的“每环境服务配置设置”部分:

简而言之,在将服务清单导入应用程序清单时,可以创建一个
ConfigOverride
。假设您在Settings.xml中为
Stateful1
服务设置了以下设置:

<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
指定特定于应用程序/环境的值。

请查看此处的“每环境服务配置设置”部分:

简而言之,在将服务清单导入应用程序清单时,可以创建一个
ConfigOverride
。假设您在Settings.xml中为
Stateful1
服务设置了以下设置:

<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
指定特定于应用程序/环境的值。

非常好,谢谢。我以前读过这篇文章,但我没有连接到可以通过ConfigurationPackage对象访问设置。如果我能为您的文章提供一个建议,那就是包括一个以编程方式访问配置设置的示例。在再次阅读本文之后,我想知道这些覆盖是否可以在ApplicationParameters文件中指定。我希望每个目标集群都有一组唯一的覆盖(例如,本地与暂存与生产)。我的假设是,应用程序清单对于所有环境都是相同的,而变量设置应该与发布配置文件和ApplicationParameters文件隔离。您是对的,这正是您可以做的。您可以在应用程序清单中指定任何参数,然后定义所需的任何覆盖,这些覆盖可以在各种发布配置文件(例如Local.xml、Cloud.xml等)中设置。@Sean您完全复制了文档。一开始没什么帮助。你到底是如何利用覆盖做一些有用的事情的?这个例子是不完整的。我一直试图用settings.xml中的值覆盖证书指纹默认值,但没有成功。发生什么事了?太好了,谢谢。我以前读过这篇文章,但我没有连接到可以通过ConfigurationPackage对象访问设置。如果我能为您的文章提供一个建议,那就是包括一个以编程方式访问配置设置的示例。在再次阅读本文之后,我想知道这些覆盖是否可以在ApplicationParameters文件中指定。我希望每个目标集群都有一组唯一的覆盖(例如,本地与暂存与生产)。我的假设是,应用程序清单对于所有环境都是相同的,而变量设置应该与发布配置文件和ApplicationParameters文件隔离。您是对的,这正是您可以做的。您可以在应用程序清单中指定任何参数,然后定义所需的任何覆盖,这些覆盖可以在各种发布配置文件(例如Local.xml、Cloud.xml等)中设置。@Sean您完全复制了文档。一开始没什么帮助。你到底是如何利用覆盖做一些有用的事情的?这个例子是不完整的。我一直试图用settings.xml中的值覆盖证书指纹默认值,但没有成功。发生了什么事?