Condividi tramite


Inviare messaggi a un argomento del Bus di servizio di Azure e ricevere messaggi dalle sottoscrizioni dell'argomento (JavaScript)

In questa esercitazione si completa la procedura seguente:

  1. Creare uno spazio dei nomi del bus di servizio usando il portale di Azure.
  2. Creare un argomento del bus di servizio usando il portale di Azure.
  3. Creare una sottoscrizione a tale argomento del bus di servizio usando il portale di Azure.
  4. Scrivere un'applicazione JavaScript per usare il pacchetto @azure/Bus di servizio per:
    • Inviare un set di messaggi all'argomento.
    • Ricevere i messaggi dalla sottoscrizione.

Nota

Questo avvio rapido fornisce istruzioni dettagliate per un semplice scenario di invio di un batch di messaggi a un argomento di Bus di servizio e ricezione di tali messaggi da una sottoscrizione dell'argomento. È possibile trovare esempi di JavaScript e TypeScript predefiniti per il Bus di servizio di Azure nel repository Azure SDK per JavaScript su GitHub.

Prerequisiti

Per usare questo avvio rapido con il proprio account Azure, è necessario:

  • Installare l'interfaccia della riga di comando di Azure, che fornisce l'autenticazione senza password al computer per sviluppatori.
  • Accedere con l'account Azure al terminale o al prompt dei comandi con az login.
  • Usare lo stesso account quando si aggiunge il ruolo appropriato alla risorsa.
  • Eseguire il codice nello stesso terminale o nel prompt dei comandi.
  • Annotare il nome dell'argomento e la sottoscrizione per lo spazio dei nomi del Bus di servizio. Sarà necessario nel codice.

Nota

Creare uno spazio dei nomi nel portale di Azure

Per iniziare a usare le entità di messaggistica del bus di servizio in Azure, prima di tutto è necessario creare uno spazio dei nomi con un nome univoco in Azure. Uno spazio dei nomi fornisce un contenitore di ambito per le risorse del Bus di servizio (code, argomenti, ecc.) all'interno dell'applicazione.

Per creare uno spazio dei nomi:

  1. Accedere al portale di Azure.

  2. Andare alla pagina Tutti i servizi.

  3. Nella barra di spostamento a sinistra selezionare Integrazione nell'elenco delle categorie, passare il puntatore del mouse sul Bus di servizio quindi selezionare il pulsante + nel riquadro Bus di servizio.

    Immagine che mostra la selezione di Crea una risorsa, Integrazione quindi Bus di servizio nel menu.

  4. Nel tag Dati principali della pagina Crea spazio dei nomi seguire questa procedura:

    1. Per Sottoscrizione scegliere una sottoscrizione di Azure in cui creare lo spazio dei nomi.

    2. Per Gruppo di risorse scegliere un gruppo di risorse esistente o crearne uno nuovo.

    3. Immettere un nome per lo spazio dei nomi. Il nome dello spazio dei nomi deve rispettare le seguenti convenzioni di denominazione:

      • Il nome deve essere univoco in Azure. Verrà effettuato immediatamente un controllo sulla disponibilità del nome.
      • La lunghezza del nome deve essere compresa tra 6 e 50 caratteri.
      • Il nome può contenere solo lettere, numeri, trattini -.
      • Il nome deve iniziare con una lettera e terminare con una lettera o un numero.
      • Il nome non termina con -sb o -mgmt.
    4. Per Localitàscegliere l'area in cui deve essere ospitato lo spazio dei nomi.

    5. In Piano tariffario, selezionare il piano tariffario (Basic, Standard o Premium) per lo spazio dei nomi. Per questo avvio rapido selezionare Standard.

    6. Se si seleziona Il livello Premium , selezionare se è possibile abilitare la replica geografica per lo spazio dei nomi. La funzionalità di replica geografica garantisce che i metadati e i dati di uno spazio dei nomi vengano replicati continuamente da un'area primaria a una o più aree secondarie.

      Importante

      Se si vogliono usare argomenti e sottoscrizioni, scegliere Standard o Premium. Argomenti e sottoscrizioni non sono supportati nel piano tariffario Basic.

      Se è stato selezionato il piano tariffario Premium, specificare il numero di unità di messaggistica. Il piano Premium fornisce l'isolamento delle risorse a livello di CPU e memoria in modo che ogni carico di lavoro venga eseguito in isolamento. Questo contenitore di risorse viene chiamato unità di messaggistica. Uno spazio dei nomi Premium ha almeno un'unità di messaggistica. È possibile acquistare 1, 2, 4, 8 o 16 unità di messaggistica per ogni spazio dei nomi Premium del Bus di servizio. Per altre informazioni, vedere Messaggistica Premium del bus di servizio.

    7. Selezionare Rivedi e crea nella parte inferiore della pagina.

      Immagine che mostra la pagina Creare uno spazio dei nomi

    8. Nella pagina Rivedi + crea controllare le impostazioni e selezionare Crea.

  5. Al termine della distribuzione della risorsa, selezionare Vai alla risorsa nella pagina di distribuzione.

    Immagine che mostra la pagina distribuzione riuscita con il link Vai alla risorsa.

  6. Viene visualizzata la home page dello spazio dei nomi del bus di servizio.

    Immagine che mostra la home page dello spazio dei nomi del Bus di servizio creato.

Creare un argomento usando il portale di Azure

  1. Nella pagina spazio dei nomi bus di servizio espandere Entità nel menu di spostamento a sinistra e selezionare Argomenti nel menu a sinistra.

  2. Selezionare + Argomento sulla barra degli strumenti.

  3. Immettere un nome per l'argomento. Lasciare invariati i valori predefiniti delle altre opzioni.

  4. Seleziona Crea.

    Immagine che mostra la pagina Crea argomento.

Creare una sottoscrizione all'argomento

  1. Selezionare l'argomento creato nella sezione precedente.

    Immagine che mostra la selezione dell'argomento nell'elenco di argomenti.

  2. Nella pagina Argomento di Bus di servizio selezionare + Sottoscrizione nella barra degli strumenti.

    Immagine che mostra il pulsante Aggiungi sottoscrizione.

  3. Nella pagina Crea sottoscrizione procedere come segue:

    1. Immettere S1 per il nome della sottoscrizione.

    2. Immettere 3 per Numero massimo di recapito.

    3. Successivamente, selezionare Crea per creare la sottoscrizione.

      Immagine che mostra la pagina Crea sottoscrizione.

Autenticare l'app in Azure

Questo avvio rapido illustra due modi per connettersi al Bus di servizio di Azure: senza password e stringa di connessione.

La prima opzione mostra come usare l'entità di sicurezza in Microsoft Entra ID e il controllo degli accessi in base al ruolo (RBAC) per connettersi a uno spazio dei nomi del Bus di servizio. Non è necessario preoccuparsi di avere una stringa di connessione hardcoded nel codice, in un file di configurazione o in un'archiviazione sicura come Azure Key Vault.

La seconda opzione mostra come usare una stringa di connessione per connettersi a uno spazio dei nomi del Bus di servizio. Se non si ha familiarità con Azure, è possibile trovare l'opzione della stringa di connessione più semplice da seguire. È consigliabile usare l'opzione senza password in applicazioni e ambienti di produzione reali. Per altre informazioni, consultare Autenticazione e autorizzazione. Per altre informazioni sull'autenticazione senza password, vedere la pagina di panoramica.

Assegnare ruoli all'utente di Microsoft Entra

Quando si sviluppa in locale, assicurarsi che l'account utente che si connette al Bus di servizio di Azure disponga delle autorizzazioni corrette. Per inviare e ricevere messaggi, è necessario il ruolo Proprietario dei dati del Bus di servizio di Azure. Per assegnare a se stessi questo ruolo, è necessario il ruolo Amministratore accesso utenti o un altro ruolo che include l'azione Microsoft.Authorization/roleAssignments/write. È possibile assegnare ruoli controllo degli accessi in base al ruolo di Azure a un utente usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell. Altre informazioni sugli ambiti disponibili per le assegnazioni di ruolo sono disponibili nella pagina panoramica dell'ambito .

L'esempio seguente assegna il ruolo Azure Service Bus Data Owner all'account utente, che fornisce l'accesso completo alle risorse del Bus di servizio di Azure. In uno scenario reale, seguire il Principio dei privilegi minimi per concedere agli utenti solo le autorizzazioni minime necessarie per un ambiente di produzione più sicuro.

Ruoli predefiniti di Azure per il Bus di servizio di Azure

Per il Bus di servizio di Azure, la gestione degli spazi dei nomi e di tutte le risorse correlate tramite il portale di Azure e l'API Gestione risorse di Azure è già protetto mediante il modello RBAC di Azure. Azure fornisce i ruoli predefiniti di Azure seguenti per autorizzare l'accesso a uno spazio dei nomi del Bus di servizio:

Per creare un ruolo personalizzato, vedere Diritti necessari per le operazioni del Bus di servizio.

Aggiungere l'utente di Microsoft Entra al ruolo Proprietario del Bus di servizio di Azure

Aggiungere il nome utente di Microsoft Entra al ruolo Proprietario dei dati del Bus di servizio di Azure a livello di spazio dei nomi del Bus di servizio. Consentirà a un'app in esecuzione nel contesto dell'account utente di inviare messaggi a una coda o a un argomento e di ricevere messaggi da una coda o da una sottoscrizione di un argomento.

Importante

Nella maggior parte dei casi, la propagazione dell'assegnazione di ruolo in Azure richiederà almeno due minuti. In rari casi, possono essere necessari fino a otto minuti. Se si ricevono errori di autenticazione quando si esegue il codice per la prima volta, attendere alcuni istanti e riprovare.

  1. Se la pagina Spazio dei nomi del Bus di servizio non è aperta nel portale di Azure, individuare lo spazio dei nomi del Bus di servizio usando la barra di ricerca principale o lo spostamento a sinistra.

  2. Nella pagina di panoramica selezionare Controllo di accesso (IAM) nel menu a sinistra.

  3. Nella pagina Controllo di accesso (IAM), selezionare la scheda Assegnazioni di ruolo.

  4. Selezionare + Aggiungi dal menu in alto e quindi Aggiungi assegnazione di ruolo dal menu a discesa risultante.

    Screenshot che mostra come assegnare un ruolo.

  5. Usare la casella di ricerca per filtrare i risultati in base al ruolo desiderato. Per questo esempio, cercare Azure Service Bus Data Owner e selezionare il risultato corrispondente. Scegliere quindi Avanti.

  6. In Assegna accesso a selezionare Utente, gruppo o entità servizio e quindi scegliere + Seleziona membri.

  7. Nella finestra di dialogo cercare il nome utente di Microsoft Entra (in genere l'indirizzo di posta elettronica user@domain) e quindi scegliere Selezionare nella parte inferiore della finestra di dialogo.

  8. Selezionare Rivedi e assegna per passare alla pagina finale e quindi Rivedi e assegna di nuovo per completare il processo.

Usare Node Package Manager (NPM) per installare il pacchetto

  1. Per installare il pacchetto/i pacchetti npm necessario/necessari per il Bus di servizio, aprire un prompt dei comandi il cui percorso comprenda npm, andare alla cartella in cui si vogliono archiviare gli esempi, quindi eseguire questo comando.

  2. Installare i pacchetti seguenti:

    npm install @azure/service-bus @azure/identity
    

Inviare messaggi a un argomento

L'esempio di codice seguente illustra come inviare un batch di messaggi all'argomento del bus di servizio. Per i dettagli, vedere i commenti nel codice.

Per consentire al computer locale di fornire l'autenticazione senza password necessaria in questo codice, è necessario aver eseguito l'accesso con az login dell'interfaccia della riga di comando di Azure.

  1. Aprire l'editor preferito, ad esempioVisual Studio Code.

  2. Creare un file denominato sendtotopic.js e incollarvi il codice riportato di seguito. Questo codice invierà un messaggio all'argomento.

    Importante

    Le credenziali senza password vengono fornite con DefaultAzureCredential.

    const { ServiceBusClient } = require("@azure/service-bus");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace
    const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net";
    
    // Passwordless credential
    const credential = new DefaultAzureCredential();
    
    const topicName = "<TOPIC NAME>";
    
    const messages = [
        { body: "Albert Einstein" },
        { body: "Werner Heisenberg" },
        { body: "Marie Curie" },
        { body: "Steven Hawking" },
        { body: "Isaac Newton" },
        { body: "Niels Bohr" },
        { body: "Michael Faraday" },
        { body: "Galileo Galilei" },
        { body: "Johannes Kepler" },
        { body: "Nikolaus Kopernikus" }
     ];
    
     async function main() {
        // create a Service Bus client using the passwordless authentication to the Service Bus namespace
        const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
    
        // createSender() can also be used to create a sender for a queue.
        const sender = sbClient.createSender(topicName);
    
        try {
            // Tries to send all messages in a single batch.
            // Will fail if the messages cannot fit in a batch.
            // await sender.sendMessages(messages);
    
            // create a batch object
            let batch = await sender.createMessageBatch();
            for (let i = 0; i < messages.length; i++) {
                // for each message in the array
    
                // try to add the message to the batch
                if (!batch.tryAddMessage(messages[i])) {
                    // if it fails to add the message to the current batch
                    // send the current batch as it is full
                    await sender.sendMessages(batch);
    
                    // then, create a new batch
                    batch = await sender.createMessageBatch();
    
                    // now, add the message failed to be added to the previous batch to this batch
                    if (!batch.tryAddMessage(messages[i])) {
                        // if it still can't be added to the batch, the message is probably too big to fit in a batch
                        throw new Error("Message too big to fit in a batch");
                    }
                }
            }
    
            // Send the last created batch of messages to the topic
            await sender.sendMessages(batch);
    
            console.log(`Sent a batch of messages to the topic: ${topicName}`);
    
            // Close the sender
            await sender.close();
        } finally {
            await sbClient.close();
        }
    }
    
    // call the main function
    main().catch((err) => {
        console.log("Error occurred: ", err);
        process.exit(1);
     });
    
  3. Sostituire <SERVICE BUS NAMESPACE CONNECTION STRING> con la stringa di connessione allo spazio dei nomi del bus di servizio.

  4. Sostituire <TOPIC NAME> con il nome dell'argomento.

  5. Quindi eseguire il comando in un prompt dei comandi per eseguire questo file.

    node sendtotopic.js
    
  6. Viene visualizzato l'output seguente.

    Sent a batch of messages to the topic: mytopic
    

Ricevere messaggi da una sottoscrizione

Per consentire al computer locale di fornire l'autenticazione senza password necessaria in questo codice, è necessario aver eseguito l'accesso con az login dell'interfaccia della riga di comando di Azure.

  1. Aprire l'editor preferito, ad esempioVisual Studio Code.

  2. Creare un file denominato receivefromsubscription.js e incollarvi il codice seguente. Per i dettagli, vedere i commenti nel codice.

    const { delay, ServiceBusClient, ServiceBusMessage } = require("@azure/service-bus");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace
    const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net";
    
    // Passwordless credential
    const credential = new DefaultAzureCredential();
    
    const topicName = "<TOPIC NAME>";
    const subscriptionName = "<SUBSCRIPTION NAME>";
    
     async function main() {
        // create a Service Bus client using the passwordless authentication to the Service Bus namespace
        const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
    
        // createReceiver() can also be used to create a receiver for a queue.
        const receiver = sbClient.createReceiver(topicName, subscriptionName);
    
        // function to handle messages
        const myMessageHandler = async (messageReceived) => {
            console.log(`Received message: ${messageReceived.body}`);
        };
    
        // function to handle any errors
        const myErrorHandler = async (error) => {
            console.log(error);
        };
    
        // subscribe and specify the message and error handlers
        receiver.subscribe({
            processMessage: myMessageHandler,
            processError: myErrorHandler
        });
    
        // Waiting long enough before closing the sender to send messages
        await delay(5000);
    
        await receiver.close();
        await sbClient.close();
    }
    
    // call the main function
    main().catch((err) => {
        console.log("Error occurred: ", err);
        process.exit(1);
     });
    
  3. Sostituire <SERVICE BUS NAMESPACE CONNECTION STRING> con la stringa di connessione allo spazio dei nomi.

  4. Sostituire <TOPIC NAME> con il nome dell'argomento.

  5. Sostituire <SUBSCRIPTION NAME> con il nome della sottoscrizione dell'argomento.

  6. Quindi eseguire il comando in un prompt dei comandi per eseguire questo file.

    node receivefromsubscription.js
    

Viene visualizzato l'output seguente.

Received message: Albert Einstein
Received message: Werner Heisenberg
Received message: Marie Curie
Received message: Steven Hawking
Received message: Isaac Newton
Received message: Niels Bohr
Received message: Michael Faraday
Received message: Galileo Galilei
Received message: Johannes Kepler
Received message: Nikolaus Kopernikus

Nel portale di Azure andare allo spazio dei nomi del Bus di servizio, quindi andare a Argomenti nel riquadro inferiore e selezionare l'argomento per visualizzare la relativa pagina Argomento del Bus di servizio. In questa pagina verranno visualizzati 10 messaggi in ingresso e 10 messaggi in uscita nel grafico Messaggi.

Messaggi in ingresso e in uscita

Se la prossima volta si esegue solo l'app di invio, nella pagina Argomento del Bus di servizio verranno visualizzati 20 messaggi in ingresso (10 nuovi) ma 10 messaggi in uscita.

Pagina dell'argomento aggiornata

Se in questa pagina si seleziona una sottoscrizione nella pagina inferiore si passa alla pagina Sottoscrizione del Bus di servizio. In questa pagina è possibile visualizzare il numero di messaggi attivi, il numero di messaggi non recapitabili e altro ancora. In questo esempio sono presenti 10 messaggi attivi che non sono stati ancora ricevuti dal destinatario.

Numero di messaggi attivi

Risoluzione dei problemi

Se viene visualizzato un errore durante l'esecuzione della versione senza password del codice JavaScript relativo alle attestazioni richieste, assicurarsi di aver eseguito l'accesso tramite il comando dell'interfaccia della riga di comando di Azure, e che il ruolo az login e appropriato venga applicato all'account utente di Azure.

Pulire le risorse

Passare allo spazio dei nomi di Bus di servizio nel portale di Azure e selezionare Elimina nel portale di Azure per eliminare lo spazio dei nomi e la coda in esso contenuti.

Passaggi successivi

Vedere la documentazione e gli esempi seguenti: