【问题标题】:Where to store configuration values in Azure Service fabric application在 Azure Service Fabric 应用程序中存储配置值的位置
【发布时间】:2016-05-02 21:59:12
【问题描述】:

我正在研究 Azure Service Fabric Reliable Actor 实施。关于我可以在哪里存储配置值(例如数据库连接字符串)以及如何在代码中访问它的任何想法/链接。

【问题讨论】:

    标签: azure azure-service-fabric


    【解决方案1】:

    Service Fabric 应用程序由代码包、配置包和数据 (https://azure.microsoft.com/en-gb/documentation/articles/service-fabric-application-model/) 组成。

    您可以使用 config 包来存储和检索您需要的任何类型的键值对,例如一个连接字符串。请查看这篇文章https://azure.microsoft.com/en-us/documentation/articles/service-fabric-manage-multiple-environment-app-configuration/ 了解更多信息。

    【讨论】:

    • 感谢您的链接,我将值存储在 Settings.xml 中。但是如何在运行时在代码中检索这个值?我没有找到任何例子。
    • 啊,好点子!您需要使用 CodePackageActivationConext。看看这个 SO 答案stackoverflow.com/questions/33928204/…
    • 像魅力一样工作。但还有一个问题。由于 ServiceInitializationParameters 只能在 Actor/Service 中访问,我如何在其他类中访问它?我无法在 Actor/Service 中创建静态变量,因为它是非静态对象。如果我创建一个普通属性,那么当我需要该值时,我必须在其他类中实例化 Actor/Service 类。
    • 您可以在无状态服务中使用它,然后在需要检索配置信息时调用该服务。在我看来,这是一个很好的解决方案,因为它封装了所有配置内容并且可以模拟出来。
    • 有关如何使用配置和数据包的完整示例,请查看此示例应用程序。此应用程序中的大多数服务都使用配置和数据包:github.com/Azure-Samples/…
    【解决方案2】:

    您可以添加多个 ApplicationParameters 文件。只需从 Cloud.Xml 复制并粘贴相同内容即可用于多种环境配置。

    进行必要更改的步骤

    1. 在导入 ServiceManifest.xml 时,需要在 ApplicationManifest.xml 中覆盖 Settings.xml 中给出的值。下面是支持覆盖更改的代码,将它们添加到 ApplicationManifest.xml 中。

      a) 先添加参数默认值

        <Parameters>
           <Parameter Name="StatelessService1_InstanceCount" DefaultValue="-1" />
           <!-- Default Value is set to Point to Dev Database  -->
           <Parameter Name="DatabaseString"DefaultValue="Server=someserver.database.windows.net\;Database=DbDev;user id=[userid];password=[Password];Trusted_Connection=false;" />
        </Parameters>
      

      b) 然后在 ServiceManifestImport 中覆盖它

        <ServiceManifestImport>
                <ServiceManifestRef ServiceManifestName="StatelessServicePkg" 
                        ServiceManifestVersion="1.0.0" />          
            <ConfigOverrides>
                 <ConfigOverride Name="Config">
                      <Settings>
                           <Section Name="DatabaseConnections">
                                   <Parameter Name="DbString" Value="[DatabaseString]" />
                          </Section>
                     </Settings>
               </ConfigOverride>
          </ConfigOverrides>
        </ServiceManifestImport>
      
    2. 以上代码更改将覆盖settings.xml中的以下代码

      <Section Name="DatabaseConnections">
          <Parameter Name="DbString" Value="Server=someserver.database.windows.net\;Database=DbDev;user id=[userid];password=[Password];Trusted_Connection=false;" />
      </Section> 
      
    3. 总体而言,部署应用程序时,ApplicationParameter DevParam.xml 或 QaParam.xml 或 ProdParam.xml 中的值将超过所有设置值。

       <Parameters>
           <Parameter Name="StatelessService1_InstanceCount" Value="-1" />
                <Parameter Name="DatabaseString" Value="Server=someserverqa.database.windows.net\;Database=DbQA;user id=[userid];password=[Password];Trusted_Connection=false;" />
       </Parameters>
      

    【讨论】:

      【解决方案3】:

      除了上述信息之外,了解 ASF 覆盖应用程序设置的顺序也很重要:

      Service Fabric 将始终从应用程序参数文件中进行选择 首先(如果指定),然后是应用程序清单,最后是 配置包(source)

      更多信息: http://www.binaryradix.com/2016/10/reading-from-configuration-within-azure.html

      【讨论】:

        猜你喜欢
        • 2016-09-20
        • 2017-10-01
        • 2017-08-05
        • 1970-01-01
        • 2020-03-11
        • 2018-11-06
        • 1970-01-01
        • 2016-09-30
        • 1970-01-01
        相关资源
        最近更新 更多