【问题标题】:Configure Service Fabric actor and service logic by deployment location按部署位置配置 Service Fabric 参与者和服务逻辑
【发布时间】:2016-02-28 11:28:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

    在此处查看“每个环境的服务配置设置”部分: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 指定应用程序/环境特定的值。

    【讨论】:

    • 太好了,谢谢。我之前读过那篇文章,但我没有建立连接,然后可以通过 ConfigurationPackage 对象访问设置。如果我可以对您的文章提出建议,那就是包含一个以编程方式访问配置设置的示例。
    • 又看了一遍文章,想知道这些覆盖是否可以在ApplicationParameters文件中指定。我希望每个目标集群都有一组独特的覆盖(例如,本地、暂存和生产)。我的假设是应用程序清单对于所有环境都是相同的,而变量设置应该与发布配置文件和 ApplicationParameters 文件隔离。
    • 你是对的——这正是你能做的。您可以在应用程序清单中指定任何参数,然后定义您想要的任何覆盖,然后可以在各种发布配置文件中进行设置,例如Local.xml、Cloud.xml 等
    • @Sean 您完全复制了文档。一开始并没有多大帮助。您究竟如何使用覆盖做一些有用的事情?示例不完整。我一直在尝试使用 settings.xml 中的值覆盖证书指纹默认值,但没有成功。发生了什么?
    猜你喜欢
    • 2017-12-17
    • 2016-08-25
    • 2020-03-11
    • 2016-04-07
    • 2016-11-06
    • 2017-08-05
    • 2016-12-07
    • 2016-07-26
    • 2018-04-28
    相关资源
    最近更新 更多