Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce istruzioni dettagliate per un semplice scenario di invio di messaggi a una coda del bus di servizio e la ricezione di tali messaggi. È possibile trovare esempi predefiniti di JavaScript e TypeScript per il bus di servizio di Azure nel repository Azure SDK per Python in GitHub.
Questa guida introduttiva spiega come:
Creare uno spazio dei nomi del bus di servizio usando il portale di Azure.
Creare una coda del bus di servizio usando il portale di Azure.
Scrivere codice Python per usare il pacchetto azure-servicebus per:
- Inviare un set di messaggi alla coda.
- Ricevere tali messaggi dalla coda.
Se non si ha familiarità con il servizio, vedere Panoramica del bus di servizio prima di iniziare.
Prerequisiti
Una sottoscrizione di Azure. Per completare questa guida introduttiva, è necessario un account Azure. È possibile attivare i crediti Azure mensili per i sottoscrittori di Visual Studio o iscriversi per ottenere un account gratuito.
Python 3.8 o versione successiva.
Per usare questo avvio rapido con il proprio account Azure:
- 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 dati appropriato alla risorsa.
- Eseguire il codice nello stesso terminale o nel prompt dei comandi.
- Prendere nota del nome della coda per lo spazio dei nomi del Bus di servizio. Devi inserire quello nel codice.
Questa guida introduttiva funziona con esempi che è possibile copiare ed eseguire usando Python. Per istruzioni su come creare un'applicazione Python, vedere Avvio rapido: Distribuire un'app Web Python nel servizio app di Azure. Per altre informazioni sull'installazione di pacchetti usati in questa guida introduttiva, vedere Come installare i pacchetti di libreria di Azure per Python.
Creare uno spazio dei nomi nel portale di Azure
Per iniziare a usare le entità di messaggistica del bus di servizio in Azure, 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, ad esempio code e argomenti, nell'applicazione.
Per creare uno spazio dei nomi:
Accedere al portale di Azure.
Selezionare il menu a comparsa in alto a sinistra e passare alla pagina Tutti i servizi.
Sulla barra di spostamento a sinistra selezionare Integrazione.
Scorrere verso il basso fino a Servizi di messaggistica>Service Bus e selezionare Crea.
Nella scheda Informazioni di base della pagina Crea spazio dei nomi seguire questa procedura:
Per Sottoscrizione scegliere una sottoscrizione di Azure in cui creare lo spazio dei nomi.
Per Gruppo di risorse scegliere un gruppo di risorse esistente o crearne uno nuovo.
Immettere un nome di spazio dei nomi che soddisfi le convenzioni di denominazione seguenti.
- 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
.
In Località scegliere l'area in cui ospitare lo spazio dei nomi.
In Piano tariffario, selezionare il piano tariffario (Basic, Standard o Premium) per lo spazio dei nomi. Per questo avvio rapido selezionare Standard.
Se si seleziona il livello Premium , è 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. Gli argomenti e le 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 Livello di messaggistica Premium del bus di servizio.
Selezionare Rivedi e crea nella parte inferiore della pagina.
Nella pagina Rivedi + crea controllare le impostazioni e selezionare Crea.
Al termine della distribuzione della risorsa, selezionare Vai alla risorsa nella pagina di distribuzione.
Viene visualizzata la home page dello spazio dei nomi del bus di servizio.
Creare una coda nel portale di Azure
Nella pagina spazio dei nomi bus di servizio espandere Entità nel menu di spostamento a sinistra e selezionare Code.
Nella pagina Code, sulla barra degli strumenti, selezionare + Coda.
Immettere un nome per la coda. Lascia gli altri valori con le loro impostazioni predefinite.
Fare clic su Crea.
Autenticare l'app in Azure
Questo articolo 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 stringa di connessione più semplice da seguire. È consigliabile usare l'opzione senza password in applicazioni e ambienti di produzione reali. Per altre informazioni, vedere Autenticazione e autorizzazione del bus di servizio. Per altre informazioni sull'autenticazione senza password, vedere Autenticare le app .NET.
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 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. Per ulteriori informazioni sugli ambiti disponibili per le assegnazioni di ruolo, vedere Comprendere l'ambito per RBAC di Azure.
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:
- Azure Service Bus Data Owner: consente l'accesso ai dati dello spazio dei nomi di Service Bus e delle relative entità, includendo code, argomenti, sottoscrizioni e filtri. Un membro di questo ruolo può inviare e ricevere messaggi da code o argomenti/sottoscrizioni.
-
Mittente dati di Azure Service Bus: Utilizzare questo ruolo per concedere l'accesso
send
allo spazio dei nomi di Service Bus e alle relative entità. -
Ricevitore dati del bus di servizio di Azure: usare questo ruolo per concedere l'accesso
receive
allo spazio dei nomi del bus di servizio e alle relative entità.
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. Questa configurazione consente a un'app eseguita nel contesto dell'account utente di inviare messaggi a una coda o a un argomento. Può 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 richiede un minuto o due. In rari casi, potrebbero 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.
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.
Nella pagina Panoramica selezionare Controllo di accesso (IAM) dal menu a sinistra.
Nella pagina Controllo di accesso (IAM), selezionare la scheda Assegnazioni di ruolo.
Selezionare + Aggiungi dal menu in alto e quindi Aggiungi assegnazione di ruolo.
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.In Assegna accesso a selezionare Utente, gruppo o entità servizio e quindi scegliere + Seleziona membri.
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.
Selezionare Rivedi e assegna per passare alla pagina finale e quindi Rivedi e assegna di nuovo per completare il processo.
Usare pip per installare i pacchetti
Per installare i pacchetti Python necessari per questa guida introduttiva al bus di servizio, aprire una finestra del prompt dei comandi con Python nel percorso.
Modificare la directory nella cartella in cui si desidera avere gli esempi.
Installare i pacchetti seguenti:
pip install azure-servicebus pip install azure-identity pip install aiohttp
Inviare messaggi a una coda
Il codice di esempio seguente illustra come inviare un messaggio a una coda. Aprire un editor di testo, ad esempio Visual Studio Code, creare un file send.py e aggiungerne il codice seguente.
Aggiungere istruzioni di importazione.
import asyncio from azure.servicebus.aio import ServiceBusClient from azure.servicebus import ServiceBusMessage from azure.identity.aio import DefaultAzureCredential
Aggiungere costanti e definire credenziali.
FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" QUEUE_NAME = "QUEUE_NAME" credential = DefaultAzureCredential()
Importante
- Sostituire
FULLY_QUALIFIED_NAMESPACE
con lo spazio dei nomi completo per lo spazio dei nomi del Bus di servizio. - Sostituire
QUEUE_NAME
con il nome della coda.
- Sostituire
Aggiungere un metodo per inviare un singolo messaggio.
async def send_single_message(sender): # Create a Service Bus message and send it to the queue message = ServiceBusMessage("Single Message") await sender.send_messages(message) print("Sent a single message")
Il mittente è un oggetto che funge da client per la coda creata. Lo crei più tardi e lo invii come argomento a questa funzione.
Aggiungere un metodo per inviare un elenco di messaggi.
async def send_a_list_of_messages(sender): # Create a list of messages and send it to the queue messages = [ServiceBusMessage("Message in list") for _ in range(5)] await sender.send_messages(messages) print("Sent a list of 5 messages")
Aggiungere un metodo per inviare un batch di messaggi.
async def send_batch_message(sender): # Create a batch of messages async with sender: batch_message = await sender.create_message_batch() for _ in range(10): try: # Add a message to the batch batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch")) except ValueError: # ServiceBusMessageBatch object reaches max_size. # New ServiceBusMessageBatch object can be created here to send more data. break # Send the batch of messages to the queue await sender.send_messages(batch_message) print("Sent a batch of 10 messages")
Creare un client del bus di servizio e quindi un oggetto mittente della coda per l'invio di messaggi.
async def run(): # create a Service Bus client using the credential async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: # get a Queue Sender object to send messages to the queue sender = servicebus_client.get_queue_sender(queue_name=QUEUE_NAME) async with sender: # send one message await send_single_message(sender) # send a list of messages await send_a_list_of_messages(sender) # send a batch of messages await send_batch_message(sender) # Close credential when no longer needed. await credential.close()
Chiamare il metodo
run
e stampare un messaggio.asyncio.run(run()) print("Done sending messages") print("-----------------------")
Ricevere messaggi da una coda
Il codice di esempio seguente illustra come ricevere messaggi da una coda. Il codice visualizzato riceve nuovi messaggi finché non ne riceve nessuno per 5 (max_wait_time
) secondi.
Aprire un editor di testo, ad esempio Visual Studio Code, creare un file recv.py e aggiungervi il codice seguente.
Analogamente all'esempio send.py, aggiungere
import
istruzioni. Sostituire le costanti con i propri valori e definire una credenziale.import asyncio from azure.servicebus.aio import ServiceBusClient from azure.identity.aio import DefaultAzureCredential FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" QUEUE_NAME = "QUEUE_NAME" credential = DefaultAzureCredential()
Creare un client del Bus di servizio quindi un oggetto ricevitore della coda per ricevere messaggi.
async def run(): # create a Service Bus client using the connection string async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: async with servicebus_client: # get the Queue Receiver object for the queue receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME) async with receiver: received_msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20) for msg in received_msgs: print("Received: " + str(msg)) # complete the message so that the message is removed from the queue await receiver.complete_message(msg) # Close credential when no longer needed. await credential.close()
Chiamare il metodo
run
.asyncio.run(run())
Eseguire l'app
Aprire un prompt dei comandi con Python nel percorso quindi eseguire il codice per inviare e ricevere messaggi dalla coda.
python send.py; python recv.py
Verrà visualizzato l'output seguente:
Sent a single message
Sent a list of 5 messages
Sent a batch of 10 messages
Done sending messages
-----------------------
Received: Single Message
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Nel portale di Azure passare allo spazio dei nomi del bus di servizio. Nella pagina Panoramica verificare che il numero di messaggi in ingresso e in uscita sia 16. Se i conteggi non vengono visualizzati, attendere alcuni minuti, quindi aggiornare la pagina.
Selezionare la coda in questa pagina Panoramica per passare alla pagina Coda del bus di servizio. In questa pagina è anche possibile visualizzare il numero di messaggi in ingresso e in uscita. Vengono visualizzate anche altre informazioni, come le dimensioni correnti della coda e il numero di messaggi attivi.
Contenuti correlati
Vedere la documentazione e gli esempi seguenti:
-
- La cartella sync_samples include esempi che mostrano come interagire con il bus di servizio in modo sincrono.
- La cartella async_samples include esempi che mostrano come interagire con il bus di servizio in modo asincrono. In questa guida di avvio rapido è stato usato questo metodo.