Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit artikel bevat stapsgewijze instructies voor een eenvoudig scenario voor het verzenden van berichten naar een Service Bus-wachtrij en het ontvangen ervan. U vindt vooraf gemaakte JavaScript- en TypeScript-voorbeelden voor Azure Service Bus in de Azure SDK voor Python-opslagplaats op GitHub.
In deze snelstart, gaat u het volgende doen:
Een Service Bus-naamruimte maken met de Azure-portal.
Een Service Bus-wachtrij maken met de Azure-portal.
Schrijf Python-code om het azure-servicebus-pakket te gebruiken voor het volgende:
- Een set berichten naar de wachtrij verzenden.
- Deze berichten ontvangen uit de wachtrij.
Als u nieuw bent bij de service, raadpleegt u het Service Bus-overzicht voordat u begint.
Vereisten
Een Azure-abonnement. U hebt een Azure-account nodig om deze quickstart te voltooien. U kunt uw maandelijkse Azure-tegoed activeren voor Visual Studio-abonnees of u aanmelden voor een gratis account.
Python 3.8 of hoger.
Ga als volgt te werk om deze quickstart te gebruiken met uw eigen Azure-account:
- Installeer Azure CLI, dat de verificatie zonder wachtwoord biedt voor uw ontwikkelcomputer.
- Meld u aan met uw Azure-account bij de terminal of opdrachtprompt met
az login. - Gebruik hetzelfde account wanneer u de juiste gegevensrol aan uw resource toevoegt.
- Voer de code uit in dezelfde terminal of opdrachtprompt.
- Noteer de wachtrijnaam voor uw Service Bus-naamruimte. Je hebt dat nodig in de code.
Deze quickstart werkt met voorbeelden die u kunt kopiëren en uitvoeren met behulp van Python. Zie quickstart: Een Python-web-app implementeren in Azure App Service voor instructies over het maken van een Python-toepassing. Zie Azure-bibliotheekpakketten installeren voor Python voor meer informatie over het installeren van pakketten die in deze quickstart worden gebruikt.
Een naamruimte in de Azure-portal maken
Als u Service Bus-berichtenentiteiten in Azure wilt gaan gebruiken, maakt u een naamruimte met een naam die uniek is in Azure. Een naamruimte biedt een bereikcontainer voor Service Bus-resources, zoals wachtrijen en onderwerpen, in uw toepassing.
Ga als volgt te werk om een naamruimte te maken:
Meld u aan bij het Azure-portaal.
Selecteer het flyoutmenu linksboven en navigeer naar de pagina Alle services.
Selecteer Integratie in de linkernavigatiebalk.
Scroll naar beneden naar Berichtendiensten>Service Bus en selecteer Maken.
Voer op het tabblad Basis van de pagina Naamruimte maken de volgende stappen uit:
Kies voor Abonnement een Azure-abonnement waarin u de naamruimte maakt.
Kies voor resourcegroep een bestaande resourcegroep of maak een nieuwe.
Voer een naamruimtenaam in die voldoet aan de volgende naamconventies:
- De naam moet uniek zijn in Azure. In het systeem wordt onmiddellijk gecontroleerd of de naam beschikbaar is.
- De naamlengte is ten minste 6 en maximaal 50 tekens.
- De naam mag alleen letters, cijfers, afbreekstreepjes
-bevatten. - De naam moet beginnen met een letter en eindigen op een letter of cijfer.
- De naam eindigt niet op
-sbof-mgmt.
Kies voor Locatie de regio voor het hosten van uw naamruimte.
Selecteer voor de prijscategorie de prijscategorie (Basic, Standard of Premium) voor de naamruimte. Voor deze quickstart selecteert u Standard.
Als u de Premium-laag selecteert, kunt u geo-replicatie inschakelen voor de naamruimte. De functie voor geo-replicatie zorgt ervoor dat de metagegevens en gegevens van een naamruimte continu worden gerepliceerd van een primaire regio naar een of meer secundaire regio's.
Belangrijk
Kies Standard of Premium indien u gebruik wilt maken van onderwerpen en abonnementen. Onderwerpen en abonnementen worden niet ondersteund in de prijscategorie Basic.
Als u de Prijscategorie Premium hebt geselecteerd, geeft u het aantal berichteneenheden op. De Premium-prijscategorie biedt isolatie van resources op het niveau van de CPU en het geheugen, zodat elke workload geïsoleerd wordt uitgevoerd. Deze resourcecontainer wordt een Messaging-eenheid genoemd. Een Premium-naamruimte heeft ten minste één Messaging-eenheid. U kunt 1, 2, 4, 8 of 16 berichteneenheden selecteren voor elke Service Bus Premium-naamruimte. Zie de Service Bus Premium Messaging-laag voor meer informatie.
Selecteer Controleren en maken onderaan de pagina.
Controleer de instellingen op de pagina Beoordelen en maken en selecteer Maken.
Nadat de implementatie van de resource is geslaagd, selecteert u Ga naar de resource op de implementatiepagina.
U ziet de startpagina voor uw Service Bus-naamruimte.
Een wachtrij maken in de Microsoft Azure-portal
Vouw op de pagina Service Bus-naamruimte entiteiten uit in het navigatiemenu aan de linkerkant en selecteer Wachtrijen.
Op de Wachtrijen pagina, selecteer + Wachtrij op de werkbalk.
Voer een naam in voor de wachtrij. Laat de andere waarden ongewijzigd met de standaardwaarden.
Klik op Creëren.
De app verifiëren bij Azure
In dit artikel ziet u twee manieren om verbinding te maken met Azure Service Bus: zonder wachtwoord en verbindingsreeks.
De eerste optie laat zien hoe u uw beveiligingsprincipaal gebruikt in Microsoft Entra ID en op rollen gebaseerd toegangsbeheer (RBAC) om verbinding te maken met een Service Bus-naamruimte. U hoeft zich geen zorgen te maken over een in code vastgelegde verbindingsreeks in uw code, in een configuratiebestand of in een beveiligde opslag, zoals Azure Key Vault.
De tweede optie laat zien hoe u een verbindingsreeks gebruikt om verbinding te maken met een Service Bus-naamruimte. Als u nog niet eerder met Azure werkt, kunt u de verbindingsreeks optie gemakkelijker volgen. We raden u aan de optie zonder wachtwoord te gebruiken in echte toepassingen en productieomgevingen. Zie Service Bus-verificatie en -autorisatie voor meer informatie. Zie .NET-apps verifiëren voor meer informatie over verificatie zonder wachtwoord.
Rollen toewijzen aan uw Microsoft Entra-gebruiker
Wanneer u lokaal ontwikkelt, moet u ervoor zorgen dat het gebruikersaccount dat verbinding maakt met Azure Service Bus de juiste machtigingen heeft. U hebt de rol Azure Service Bus-gegevenseigenaar nodig om berichten te kunnen verzenden en ontvangen. Als u uzelf deze rol wilt toewijzen, hebt u de rol Gebruikerstoegangsbeheerder of een andere rol nodig die de Microsoft.Authorization/roleAssignments/write actie bevat.
U kunt Azure RBAC-rollen toewijzen aan een gebruiker met behulp van Azure Portal, Azure CLI of Azure PowerShell. Zie Bereik voor Azure RBAC begrijpen voor meer informatie over de beschikbare bereiken voor roltoewijzingen.
In het volgende voorbeeld wordt de Azure Service Bus Data Owner rol toegewezen aan uw gebruikersaccount, dat volledige toegang biedt tot Azure Service Bus-resources. Volg in een echt scenario het principe van minimale bevoegdheden om gebruikers alleen de minimale machtigingen te geven die nodig zijn voor een veiligere productieomgeving.
Ingebouwde Azure-rollen voor Azure Service Bus
Voor Azure Service Bus is het beheer van naamruimten en alle gerelateerde resources via Azure Portal en de Azure Resource Management-API al beveiligd met behulp van het Azure RBAC-model. Azure biedt de volgende ingebouwde Azure-rollen voor het autoriseren van toegang tot een Service Bus-naamruimte:
- Azure Service Bus-gegevenseigenaar: hiermee schakelt u gegevenstoegang tot de Service Bus-naamruimte en de bijbehorende entiteiten in, waaronder wachtrijen, onderwerpen, abonnementen en filters. Een lid van deze rol kan berichten verzenden en ontvangen van wachtrijen of onderwerpen/abonnementen.
-
Azure Service Bus-gegevenszender: gebruik deze rol om de toegang te verlenen tot de Service Bus-naamruimte en de
sendbijbehorende entiteiten. -
Azure Service Bus-gegevensontvanger: gebruik deze rol om de toegang te verlenen tot de Service Bus-naamruimte en de
receivebijbehorende entiteiten.
Als u een aangepaste rol wilt maken, raadpleegt u Rechten die vereist zijn voor Service Bus-bewerkingen.
Microsoft Entra-gebruiker toevoegen aan de rol Azure Service Bus-eigenaar
Voeg uw Microsoft Entra-gebruikersnaam toe aan de rol Azure Service Bus-gegevenseigenaar op het niveau van de Service Bus-naamruimte. Met deze configuratie kan een app die wordt uitgevoerd in de context van uw gebruikersaccount berichten verzenden naar een wachtrij of een onderwerp. Het kan berichten ontvangen van een wachtrij of een abonnement op een onderwerp.
Belangrijk
In de meeste gevallen duurt het een paar minuten voordat de roltoewijzing in Azure is doorgegeven. In zeldzame gevallen kan het maximaal acht minuten duren. Als u verificatiefouten ontvangt wanneer u de code voor het eerst uitvoert, wacht u even en probeert u het opnieuw.
Als u de pagina Service Bus-naamruimte niet hebt geopend in Azure Portal, zoekt u uw Service Bus-naamruimte met behulp van de hoofdzoekbalk of linkernavigatiebalk.
Selecteer op de pagina Overzichttoegangsbeheer (IAM) in het menu aan de linkerkant.
Selecteer op de pagina Toegangsbeheer (IAM) het tabblad Roltoewijzingen .
Selecteer + Toevoegen in het bovenste menu en voeg vervolgens roltoewijzing toe.
Gebruik het zoekvak om de resultaten te filteren op de gewenste rol. In dit voorbeeld zoekt
Azure Service Bus Data Owneren selecteert u het overeenkomende resultaat. Kies vervolgens Volgende.Selecteer onder Toegang toewijzen de optie Gebruiker, groep of service-principal en kies vervolgens + Leden selecteren.
Zoek in het dialoogvenster naar uw Microsoft Entra-gebruikersnaam (meestal uw user@domain e-mailadres) en kies Vervolgens onderaan het dialoogvenster Selecteren .
Selecteer Beoordelen + toewijzen om naar de laatste pagina te gaan en vervolgens opnieuw beoordelen en toewijzen om het proces te voltooien.
Pip gebruiken om pakketten te installeren
Als u de vereiste Python-pakketten voor deze Service Bus-quickstart wilt installeren, opent u een opdrachtpromptvenster met Python in het pad.
Wijzig de map in de map waarin u uw voorbeelden wilt hebben.
Installeer de volgende pakketten:
pip install azure-servicebus pip install azure-identity pip install aiohttp
Berichten verzenden naar een wachtrij
De volgende voorbeeldcode laat zien hoe u een bericht naar een wachtrij verzendt. Open een teksteditor, zoals Visual Studio Code, maak een bestand send.py en voeg de volgende code eraan toe.
Importinstructies toevoegen.
import asyncio from azure.servicebus.aio import ServiceBusClient from azure.servicebus import ServiceBusMessage from azure.identity.aio import DefaultAzureCredentialVoeg constanten toe en definieer een referentie.
FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" QUEUE_NAME = "QUEUE_NAME" credential = DefaultAzureCredential()Belangrijk
- Vervang door
FULLY_QUALIFIED_NAMESPACEde volledig gekwalificeerde naamruimte voor uw Service Bus-naamruimte. - Vervang
QUEUE_NAMEdoor de naam van het wachtrij.
- Vervang door
Voeg een methode voor het verzenden van één bericht toe.
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")De afzender is een object dat fungeert als een client voor de wachtrij dat u hebt gemaakt. U maakt deze later en verzendt als argument naar deze functie.
Voeg een methode voor het verzenden van een lijst met berichten toe.
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")Voeg een methode voor het verzenden van een batch met berichten toe.
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")Maak een Service Bus-client en vervolgens een object voor de afzender van de wachtrij om berichten te verzenden.
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()Roep de
runmethode aan en druk een bericht af.asyncio.run(run()) print("Done sending messages") print("-----------------------")
Berichten van een wachtrij ontvangen
In de volgende voorbeeldcode ziet u hoe u berichten van een wachtrij ontvangt. De weergegeven code ontvangt nieuwe berichten totdat er gedurende 5 (max_wait_time) seconden geen nieuwe berichten worden ontvangen.
Open een teksteditor, zoals Visual Studio Code, maak een bestand recv.py en voeg de volgende code eraan toe.
Voeg instructies toe die vergelijkbaar zijn met het
import. Vervang de constanten door uw eigen waarden en definieer een referentie.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()Maak een Service Bus-client en vervolgens een wachtrijontvangerobject om berichten te ontvangen.
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()Roep de
runmethode aan.asyncio.run(run())
De app uitvoeren
Open een opdrachtprompt met Python in het pad en voer vervolgens de code uit om berichten uit de wachtrij te verzenden en te ontvangen.
python send.py; python recv.py
U moet de volgende uitvoer zien:
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
Ga in Azure Portal naar uw Service Bus-naamruimte. Controleer op de pagina Overzicht of er 16 inkomende en uitgaande berichten zijn. Als u de aantallen niet ziet, wacht u enkele minuten en vernieuwt u de pagina.
Selecteer de wachtrij op de pagina Overzicht om naar de pagina Service Bus-wachtrij te gaan. U kunt ook de binnenkomende en uitgaande berichten op deze pagina zien. U ziet ook andere informatie, zoals de huidige grootte van de wachtrij en aantal actieve berichten.
Verwante inhoud
Raadpleeg de volgende documentatie en voorbeelden:
-
- De map sync_samples bevat voorbeelden die laten zien hoe u op synchrone wijze met Service Bus kunt werken.
- De map async_samples bevat voorbeelden die laten zien hoe u op asynchrone wijze met Service Bus kunt werken. In deze quickstart hebt u deze methode gebruikt.