Condividi tramite


Esercitazione: Usare la configurazione dinamica in JavaScript

Questa esercitazione illustra come abilitare la configurazione dinamica nelle applicazioni JavaScript. L'esempio in questa esercitazione si basa sull'applicazione di esempio introdotta nella guida introduttiva a JavaScript. Prima di continuare, completare Creare un'app JavaScript con app Azure Configurazione.

Prerequisiti

Aggiungere coppie chiave-valore

Aggiungere il valore chiave seguente all'archivio di configurazione app Azure. Per altre informazioni su come aggiungere valori chiave a un archivio usando il portale di Azure o l’interfaccia della riga di comando, andare a Creare un valore chiave.

Chiave valore Etichetta Tipo contenuto
message Salve, mondo! Lasciare vuoto Lasciare vuoto

Applicazioni console

Negli esempi seguenti viene illustrato come usare i valori di configurazione aggiornabili nelle applicazioni console. Scegliere le istruzioni seguenti in base al modo in cui l'applicazione utilizza i dati di configurazione caricati da Configurazione app, come Map oggetto di configurazione o .

Caricare dati da Configurazione app

È possibile connettersi a Configurazione app usando Microsoft Entra ID (scelta consigliata) o un stringa di connessione. Il frammento di codice seguente illustra l'uso dell'ID Microsoft Entra. Usare DefaultAzureCredential per eseguire l'autenticazione nell'archivio Configurazione app. Durante il completamento dell'argomento di avvio rapido elencato nei prerequisiti, è già stato assegnato il ruolo lettore dati Configurazione app.

  1. Aprire il file app.js e aggiornare la load funzione. Aggiungere un refreshOptions parametro per abilitare le opzioni di aggiornamento e configurare l'aggiornamento. La configurazione caricata verrà aggiornata quando viene rilevata una modifica nel server. Per impostazione predefinita, viene usato un intervallo di aggiornamento di 30 secondi, ma è possibile eseguirne l'override con la refreshIntervalInMs proprietà .

    // Connecting to Azure App Configuration using endpoint and token credential
    const appConfig = await load(endpoint, credential, {
        // Enabling the dynamic refresh
        refreshOptions: {
            enabled: true
        }
    });
    

Nota

Se viene visualizzato l'errore "L'aggiornamento è abilitato ma non sono specificate impostazioni di controllo". Aggiornare il @azure/app-configuration-provider pacchetto alla versione 2.0.0 o successiva.

  1. La configurazione refreshOptions da sola non aggiornerà automaticamente la configurazione. È necessario chiamare il refresh metodo per attivare un aggiornamento. Questa progettazione impedisce richieste non necessarie di Configurazione app quando l'applicazione è inattiva. È necessario includere la chiamata in cui si verifica l'attività refresh dell'applicazione. Questa operazione è nota come aggiornamento della configurazione guidata dall'attività. Ad esempio, è possibile chiamare refresh quando si elabora un messaggio in arrivo o un ordine o all'interno di un'iterazione in cui si esegue un'attività complessa. In alternativa, è possibile usare un timer se l'applicazione è sempre attiva. In questo esempio, refresh viene chiamato in un ciclo a scopo dimostrativo. Anche se la refresh chiamata non riesce per qualsiasi motivo, l'applicazione continuerà a usare la configurazione memorizzata nella cache. Verrà eseguito un altro tentativo quando l'intervallo di aggiornamento configurato è passato e la refresh chiamata viene attivata dall'attività dell'applicazione. La chiamata refresh è un no-op prima che l'intervallo di aggiornamento configurato venga trascorso, quindi l'impatto sulle prestazioni è minimo anche se viene chiamato frequentemente.

    Aggiungere il codice seguente per eseguire il polling delle modifiche di configurazione dei valori chiave sorvegliati.

    // Polling for configuration changes every 5 seconds
    while (true) {
        console.log(appConfig.get("message")); // Consume current value of message from a Map
        appConfig.refresh(); // Refreshing the configuration setting asynchronously
        await sleepInMs(5000); // Waiting before the next refresh
    }
    
  2. Ora il file app.js dovrebbe essere simile al frammento di codice seguente:

    const sleepInMs = require("util").promisify(setTimeout);
    const { load } = require("@azure/app-configuration-provider");
    const { DefaultAzureCredential } = require("@azure/identity");
    const endpoint = process.env.AZURE_APPCONFIG_ENDPOINT;
    const credential = new DefaultAzureCredential(); // For more information, see https://learn.microsoft.com/azure/developer/javascript/sdk/credential-chains#use-defaultazurecredential-for-flexibility
    
    async function run() {
        // Connecting to Azure App Configuration using endpoint and token credential
        const appConfig = await load(endpoint, credential, {
            // Enabling the dynamic refresh
            refreshOptions: {
                enabled: true
            }
        });
    
        // Polling for configuration changes every 5 seconds
        while (true) {
            console.log(appConfig.get("message")); // Consume current value of message from a Map
            appConfig.refresh(); // Refreshing the configuration setting asynchronously
            await sleepInMs(5000); // Waiting before the next refresh
        }
    }
    
    run().catch(console.error);
    

Eseguire l'applicazione

  1. Eseguire lo script:

    node app.js
    
  2. Verificare l'output:

    Hello World!
    

    Continua a stampare "Hello World!" in una nuova riga ogni 5 secondi.

  3. Aggiornare i valori chiave seguenti all'archivio di configurazione app Azure. Aggiornare il valore della chiave message.

    Chiave valore Etichetta Tipo contenuto
    message Hello World - Aggiornato! Lasciare vuoto Lasciare vuoto
  4. Dopo l'aggiornamento dei valori, il valore aggiornato viene stampato dopo l'intervallo di aggiornamento.

    Hello World - Updated!
    

Applicazione server

Nell'esempio seguente viene illustrato come aggiornare un server HTTP esistente per usare i valori di configurazione aggiornabili.

  1. Creare un nuovo file javascript denominato server.js e aggiungere il codice seguente:

    const http = require('http');
    
    function startServer() {
        const server = http.createServer((req, res) => {
            res.statusCode = 200;
            res.setHeader('Content-Type', 'text/plain');
            res.end("Hello World!");
        });
    
        const hostname = "localhost";
        const port = 3000;
        server.listen(port, hostname, () => {
        console.log(`Server running at http://localhost:${port}/`);
        });
    }
    
    startServer();
    
  2. Eseguire lo script:

    node server.js
    
  3. Visitare http://localhost:3000 e verrà visualizzata la risposta:

    Screenshot del browser con un messaggio.

Caricare dati da Configurazione app

  1. Aggiornare per usare Configurazione app e abilitare l'aggiornamento server.js dinamico:

    const http = require("http");
    
    const { load } = require("@azure/app-configuration-provider");
    const { DefaultAzureCredential } = require("@azure/identity");
    const endpoint = process.env.AZURE_APPCONFIG_ENDPOINT;
    const credential = new DefaultAzureCredential(); // For more information, see https://learn.microsoft.com/azure/developer/javascript/sdk/credential-chains#use-defaultazurecredential-for-flexibility
    
    let appConfig;
    async function initializeConfig() {
        appConfig = await load(endpoint, credential, {
            refreshOptions: {
                enabled: true,
                refreshIntervalInMs: 15_000 // set the refresh interval
            }
        });
    }
    
    function startServer() {
        const server = http.createServer((req, res) => {
            // refresh the configuration asynchronously when there is any incoming request
            appConfig.refresh();
            res.statusCode = 200;
            res.setHeader('Content-Type', 'text/plain');
            res.end(appConfig.get("message"));
        });
    
        const hostname = "localhost";
        const port = 3000;
        server.listen(port, hostname, () => {
        console.log(`Server running at http://localhost:${port}/`);
        });
    }
    
    // Initialize the configuration and then start the server
    initializeConfig()
        .then(() => startServer());
    

Aggiornamento della configurazione basata su richiesta

Nella maggior parte dei casi, l'operazione di aggiornamento del provider di Configurazione app può essere considerata come no-op. Invierà solo richieste per controllare il valore in Configurazione app quando è trascorso l'intervallo di aggiornamento impostato.

È consigliabile implementare l'aggiornamento della configurazione guidata dalla richiesta per l'applicazione Web. L'aggiornamento della configurazione viene attivato dalle richieste in ingresso all'app Web. Se l'app non è inattiva, non verrà eseguito alcun aggiornamento quando non è presente alcuna richiesta in ingresso. Quando l'app è attiva, è possibile usare un middleware o un meccanismo simile per attivare la appConfig.refresh() chiamata a ogni richiesta in ingresso all'applicazione.

  • Se una richiesta di Configurazione app per il rilevamento delle modifiche non riesce, l'app continuerà a usare la configurazione memorizzata nella cache. I nuovi tentativi di verificare la presenza di modifiche verranno eseguiti periodicamente mentre sono presenti nuove richieste in ingresso per l'app.

  • L'aggiornamento della configurazione viene eseguito in modo asincrono per l'elaborazione delle richieste in ingresso dell'app. Non blocca o rallenta la richiesta in ingresso che ha attivato l'aggiornamento. La richiesta che ha attivato l'aggiornamento potrebbe non ottenere i valori di configurazione aggiornati, ma le richieste successive otterranno nuovi valori di configurazione.

Eseguire l'applicazione

  1. Riavviare il server HTTP:

    node server.js
    
  2. Visitare http://localhost:3000 e verificare la risposta che rappresenta la message chiave nell'archivio Configurazione app.

    Screenshot del browser con un messaggio di Configurazione app.

  3. Aggiornare i valori chiave seguenti all'archivio di configurazione app Azure. Aggiornare il valore della chiave message.

    Chiave valore Etichetta Tipo contenuto
    message Hello World - Aggiornato! Lasciare vuoto Lasciare vuoto
  4. Dopo circa 15 secondi, aggiornare la pagina per più volte e il messaggio deve essere aggiornato.

    Screenshot del browser con un messaggio aggiornato da Configurazione app.

Pulire le risorse

Se non si vuole continuare a usare le risorse create in questo articolo, eliminare il gruppo di risorse creato qui per evitare addebiti.

Importante

L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse o le risorse sbagliate. Se le risorse per questo articolo sono state create in un gruppo di risorse che contiene altre risorse che si vogliono mantenere, eliminare ogni risorsa singolarmente dal rispettivo riquadro anziché eliminare il gruppo di risorse.

  1. Accedere al portale di Azure e selezionare Gruppi di risorse.
  2. Nella casella Filtra per nome immettere il nome del gruppo di risorse.
  3. Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
  4. Selezionare Elimina gruppo di risorse.
  5. Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Immettere il nome del gruppo di risorse per confermare e selezionare Elimina.

Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.

Passaggi successivi

In questa esercitazione è stato abilitato l'app JavaScript per aggiornare dinamicamente le impostazioni di configurazione da app Azure Configurazione. Per informazioni su come usare un'identità gestita di Azure per semplificare l'accesso a app Azure Configurazione, passare all'esercitazione successiva.

Per il rundown completo della funzionalità della libreria del provider di configurazione JavaScript, continuare con il documento seguente.