教程:在 JavaScript 中使用动态配置

本教程介绍如何在 JavaScript 应用程序中启用动态配置。 本教程中的示例基于 JavaScript 快速入门中介绍的示例应用程序。 在继续之前,请先完成使用 Azure 应用程序配置创建 JavaScript 应用

先决条件

添加键值

将以下键值添加到 Azure 应用程序配置存储。 有关如何使用 Azure 门户或 CLI 将键值添加到存储区的详细信息,请转到创建键值

密钥 Label 内容类型
message Hello World! 留空 留空
sentinel 1 留空 留空

注意

Sentinel 键是完成所有其他键的更改后更新的键。 应用会监视 sentinel 键。 检测到更改时,应用会刷新所有配置值。 与监视所有键以了解更改情况相比,此方法有助于确保应用程序中配置的一致性,并减少对 Azure 应用程序配置存储发出的请求总数。

从应用配置重载数据

以下示例演示如何在控制台应用程序中使用可刷新的配置值。 根据应用程序使用从应用程序配置加载的配置数据的方式(作为 Map 或配置对象)选择以下说明。

  1. 打开文件 app.js 并更新 load 函数。 添加 refreshOptions 参数以启用刷新并配置刷新选项。 当服务器上检测到更改时,将更新加载的配置。 默认使用 30 秒刷新间隔,但你可以使用 refreshIntervalInMs 属性重写此间隔。

    // Connecting to Azure App Configuration using connection string
    const settings = await load(connectionString, {
        // Setting up to refresh when the sentinel key is changed
        refreshOptions: {
            enabled: true,
            watchedSettings: [{ key: "sentinel" }] // Watch for changes to the key "sentinel" and refreshes the configuration when it changes
        }
    });
    
  2. 仅仅是设置 refreshOptions 不会自动刷新配置。 需要调用 refresh 方法来触发刷新。 此设计可防止应用程序处于空闲状态时对应用程序配置发出不必要的请求。 应在应用程序活动发生的位置包含 refresh 调用。 这称为活动驱动的配置刷新。 例如,可以在处理传入消息或订单时调用 refresh,或者在执行复杂任务的迭代过程中调用它。 或者,如果应用程序始终处于活动状态,则你可以使用计时器。 在此示例中,出于演示目的,在循环中调用了 refresh。 即使 refresh 调用因任何原因而失败,应用程序也将继续使用缓存的配置。 当配置的刷新间隔已过,并且应用程序活动触发 refresh 调用时,将进行另一次尝试。 在配置的刷新间隔过去之前调用 refresh 是一个空操作,因此,即使频繁调用,它的性能影响也很小。

    添加以下代码来轮询受监视键值的配置更改。

    // Polling for configuration changes every 5 seconds
    while (true) {
        await sleepInMs(5000); // Waiting before the next refresh
        await settings.refresh(); // Refreshing the configuration setting
        console.log(settings.get("message")); // Consume current value of message from a Map
    }
    
  3. 现在,文件 app.js 应类似于以下代码片段

    const sleepInMs = require("util").promisify(setTimeout);
    const { load } = require("@azure/app-configuration-provider");
    const connectionString = process.env.AZURE_APPCONFIG_CONNECTION_STRING;
    
    async function run() {
        // Connecting to Azure App Configuration using connection string
        const settings = await load(connectionString, {
            // Setting up to refresh when the sentinel key is changed
            refreshOptions: {
                enabled: true,
                watchedSettings: [{ key: "sentinel" }] // Watch for changes to the key "sentinel" and refreshes the configuration when it changes
            }
        });
    
        // Polling for configuration changes every 5 seconds
        while (true) {
            await sleepInMs(5000); // Waiting before the next refresh
            await settings.refresh(); // Refreshing the configuration setting
            console.log(settings.get("message")); // Consume current value of message from a Map
        }
    }
    
    run().catch(console.error);
    

运行应用程序

  1. 运行脚本:

    node app.js
    
  2. 验证输出:

    Hello World!
    

    它继续每隔 5 秒在新行中输出“Hello World!”。

  3. 将以下键值更新到 Azure 应用程序配置存储。 首先更新键 message 的值,然后更新 sentinel 的值。

    密钥 Label 内容类型
    message Hello World - 已更新! 留空 留空
    sentinel 2 留空 留空
  4. 更新值后,将在刷新间隔后输出更新的值。

    Hello World - Updated!
    

清理资源

如果不想继续使用本文中创建的资源,请删除此处创建的资源组以避免产生费用。

重要

删除资源组的操作不可逆。 将永久删除资源组以及其中的所有资源。 请确保不要意外删除错误的资源组或资源。 如果在包含要保留的其他资源的资源组中创建了本文的资源,请从相应的窗格中单独删除每个资源,而不是删除该资源组。

  1. 登录到 Azure 门户,然后选择“资源组”。
  2. 在“按名称筛选”框中,输入资源组的名称
  3. 在结果列表中,选择资源组名称以查看概述。
  4. 选择“删除资源组”。
  5. 系统会要求确认是否删除资源组。 重新键入资源组的名称进行确认,然后选择“删除” 。

片刻之后,将会删除该资源组及其所有资源。

后续步骤

在本教程中,你已使 JavaScript 应用能够通过 Azure 应用程序配置动态刷新配置设置。 要了解如何使用 Azure 托管标识简化对 Azure 应用程序配置的访问,请继续学习下一教程。