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.
Deze quickstart bevat stapsgewijze instructies voor een eenvoudig scenario voor het verzenden van berichten naar een Service Bus-wachtrij en het ontvangen ervan. U maakt een Java-app om berichten te verzenden naar en te ontvangen van een Azure Service Bus-wachtrij. U vindt vooraf gemaakte Java-voorbeelden voor Azure Service Bus in de Azure SDK voor Java-opslagplaats op GitHub.
Aanbeveling
Als u met Azure Service Bus-resources in een Spring-toepassing werkt, raden we u aan Spring Cloud Azure te overwegen. Spring Cloud Azure is een opensource-project dat naadloze Spring-integratie met Azure-services biedt. Zie Spring Cloud Stream met Azure Service Bus voor meer informatie over Spring Cloud Azure en voor een voorbeeld met Service Bus.
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.
Installeer de Azure-SDK voor Java.
- Als u Eclipse gebruikt, kunt u de Azure-toolkit voor Eclipse installeren die de Azure-SDK voor Java bevat. U kunt vervolgens de Microsoft Azure-bibliotheken voor Java toevoegen aan uw project.
- Als u IntelliJ gebruikt, raadpleegt u De Azure-toolkit voor IntelliJ installeren.
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 Beoordelen 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 in het navigatiemenu aan de linkerkant Entiteiten uit, 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, kunt u vereiste rechten voor Service Bus-bewerkingen raadplegen.
Microsoft Entra-gebruiker toevoegen aan de rol Azure Service Bus-eigenaar
Voeg uw Microsoft Entra-gebruikersnaam toe aan de rol Azure Service Bus Data-eigenaar 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. Zoek naar
Azure Service Bus Data Owneren selecteer het overeenkomende resultaat. Kies Volgende vervolgens.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.
Berichten verzenden naar een wachtrij
In deze sectie maakt u een Java-consoleproject en voegt u code toe om berichten te verzenden naar de wachtrij die u eerder hebt gemaakt.
Een Java-consoleproject maken
Maak een Java-project met Eclipse of een hulpprogramma van uw keuze.
Uw toepassing configureren voor het gebruik van Service Bus
Voeg verwijzingen toe naar Azure Core- en Azure Service Bus-bibliotheken.
Als u Eclipse gebruikt en een Java-consoletoepassing hebt gemaakt, converteert u uw Java-project naar een Maven: klik met de rechtermuisknop op het project in het venster Package Explorer . Selecteer Configureren>Omzetten naar Maven-project. Voeg vervolgens afhankelijkheden toe aan deze twee bibliotheken, zoals wordt weergegeven in het volgende voorbeeld.
Werk het pom.xml bestand bij om afhankelijkheden toe te voegen aan Azure Service Bus- en Azure Identity-pakketten.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-servicebus</artifactId>
<version>7.13.3</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.8.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
Code toevoegen om berichten naar de wachtrij te verzenden
Voeg de volgende
import-instructies toe aan het onderwerp van het Java-bestand.import com.azure.messaging.servicebus.*; import com.azure.identity.*; import java.util.concurrent.TimeUnit; import java.util.Arrays; import java.util.List;Definieer in de klasse variabelen voor het opslaan van de verbindingsreeks en de naam van de wachtrij.
static String queueName = "<QUEUE NAME>";Belangrijk
Vervang
<QUEUE NAME>door de naam van de wachtrij.Voeg in de klasse een methode toe met de naam
sendMessageom een bericht naar de wachtrij te verzenden.Belangrijk
Vervang
NAMESPACENAMEdoor de naam van de Service Bus-naamruimte.static void sendMessage() { // create a token using the default Azure credential DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .build(); ServiceBusSenderClient senderClient = new ServiceBusClientBuilder() .fullyQualifiedNamespace("NAMESPACENAME.servicebus.windows.net") .credential(credential) .sender() .queueName(queueName) .buildClient(); // send one message to the queue senderClient.sendMessage(new ServiceBusMessage("Hello, World!")); System.out.println("Sent a single message to the queue: " + queueName); }Voeg in de klasse een methode toe met de naam
createMessagesom een lijst met berichten te maken. Normaal gesproken ontvangt u deze berichten van verschillende onderdelen van uw toepassing. In dit voorbeeld gebruikt u een lijst met voorbeeldberichten.static List<ServiceBusMessage> createMessages() { // create a list of messages and return it to the caller ServiceBusMessage[] messages = { new ServiceBusMessage("First message"), new ServiceBusMessage("Second message"), new ServiceBusMessage("Third message") }; return Arrays.asList(messages); }Voeg een methode toe met de naam
sendMessageBatchom berichten te verzenden naar de wachtrij die u hebt gemaakt. Met deze methode maakt u eenServiceBusSenderClientvoor de wachtrij, roept u de methodecreateMessagesaan om de lijst met berichten op te halen, bereidt u een of meer batches voor en verzendt u de batches naar de wachtrij.Belangrijk
Vervang
NAMESPACENAMEdoor de naam van de Service Bus-naamruimte.static void sendMessageBatch() { // create a token using the default Azure credential DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .build(); ServiceBusSenderClient senderClient = new ServiceBusClientBuilder() .fullyQualifiedNamespace("NAMESPACENAME.servicebus.windows.net") .credential(credential) .sender() .queueName(queueName) .buildClient(); // Creates an ServiceBusMessageBatch where the ServiceBus. ServiceBusMessageBatch messageBatch = senderClient.createMessageBatch(); // create a list of messages List<ServiceBusMessage> listOfMessages = createMessages(); // We try to add as many messages as a batch can fit based on the maximum size and send to Service Bus when // the batch can hold no more messages. Create a new batch for next set of messages and repeat until all // messages are sent. for (ServiceBusMessage message : listOfMessages) { if (messageBatch.tryAddMessage(message)) { continue; } // The batch is full, so we create a new batch and send the batch. senderClient.sendMessages(messageBatch); System.out.println("Sent a batch of messages to the queue: " + queueName); // create a new batch messageBatch = senderClient.createMessageBatch(); // Add that message that we couldn't before. if (!messageBatch.tryAddMessage(message)) { System.err.printf("Message is too large for an empty batch. Skipping. Max size: %s.", messageBatch.getMaxSizeInBytes()); } } if (messageBatch.getCount() > 0) { senderClient.sendMessages(messageBatch); System.out.println("Sent a batch of messages to the queue: " + queueName); } //close the client senderClient.close(); }
Berichten van een wachtrij ontvangen
In deze sectie voegt u code toe om berichten uit de wachtrij op te halen.
Voeg een methode toe met de naam
receiveMessagesom berichten van de wachtrij te ontvangen. Met deze methode maakt u eenServiceBusProcessorClientvoor de wachtrij door een handler op te geven voor de verwerking van berichten en een andere voor het afhandelen van fouten. Vervolgens wordt de verwerker gestart, wordt er een paar seconden gewacht, worden de ontvangen berichten getoond en wordt de verwerker gestopt en gesloten.Belangrijk
- Vervang
NAMESPACENAMEdoor de naam van de Service Bus-naamruimte.
// handles received messages static void receiveMessages() throws InterruptedException { DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .build(); ServiceBusProcessorClient processorClient = new ServiceBusClientBuilder() .fullyQualifiedNamespace("NAMESPACENAME.servicebus.windows.net") .credential(credential) .processor() .queueName(queueName) .processMessage(context -> processMessage(context)) .processError(context -> processError(context)) .buildProcessorClient(); System.out.println("Starting the processor"); processorClient.start(); TimeUnit.SECONDS.sleep(10); System.out.println("Stopping and closing the processor"); processorClient.close(); }- Vervang
Voeg de
processMessagemethode toe om een bericht te verwerken dat is ontvangen van het Service Bus-abonnement.private static void processMessage(ServiceBusReceivedMessageContext context) { ServiceBusReceivedMessage message = context.getMessage(); System.out.printf("Processing message. Session: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(), message.getSequenceNumber(), message.getBody()); }Voeg de
processErrormethode toe om foutberichten te verwerken.private static void processError(ServiceBusErrorContext context) { System.out.printf("Error when receiving messages from namespace: '%s'. Entity: '%s'%n", context.getFullyQualifiedNamespace(), context.getEntityPath()); if (!(context.getException() instanceof ServiceBusException)) { System.out.printf("Non-ServiceBusException occurred: %s%n", context.getException()); return; } ServiceBusException exception = (ServiceBusException) context.getException(); ServiceBusFailureReason reason = exception.getReason(); if (reason == ServiceBusFailureReason.MESSAGING_ENTITY_DISABLED || reason == ServiceBusFailureReason.MESSAGING_ENTITY_NOT_FOUND || reason == ServiceBusFailureReason.UNAUTHORIZED) { System.out.printf("An unrecoverable error occurred. Stopping processing with reason %s: %s%n", reason, exception.getMessage()); } else if (reason == ServiceBusFailureReason.MESSAGE_LOCK_LOST) { System.out.printf("Message lock lost for message: %s%n", context.getException()); } else if (reason == ServiceBusFailureReason.SERVICE_BUSY) { try { // Choosing an arbitrary amount of time to wait until trying again. TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { System.err.println("Unable to sleep for period of time"); } } else { System.out.printf("Error source %s, reason %s, message: %s%n", context.getErrorSource(), reason, context.getException()); } }Werk de methode
mainbij om de methodensendMessage,sendMessageBatchenreceiveMessagesaan te roepen enInterruptedExceptionte genereren.public static void main(String[] args) throws InterruptedException { sendMessage(); sendMessageBatch(); receiveMessages(); }
De app uitvoeren
Als u Eclipse gebruikt, klikt u met de rechtermuisknop op het project, selecteert u Exporteren, vouwt u Java uit, selecteert u Runnable JAR-bestand en volgt u de stappen om een uitvoerbaar JAR-bestand te maken.
Als u bent aangemeld onder een gebruikersaccount dat verschilt van het account dat u hebt toegevoegd aan de rol Azure Service Bus-gegevenseigenaar , volgt u deze stappen. Anders gaat u verder met het uitvoeren van het Jar-bestand in de volgende stap.
Installeer Azure CLI op uw computer.
Voer de volgende CLI-opdracht uit om u aan te melden bij Azure. Gebruik hetzelfde gebruikersaccount dat u hebt toegevoegd aan de rol Azure Service Bus-gegevensbeheerder.
az login
Voer het Jar-bestand uit met behulp van de volgende opdracht.
java -jar <JAR FILE NAME>U ziet de volgende uitvoer in het consolevenster.
Sent a single message to the queue: myqueue Sent a batch of messages to the queue: myqueue Starting the processor Processing message. Session: 88d961dd801f449e9c3e0f8a5393a527, Sequence #: 1. Contents: Hello, World! Processing message. Session: e90c8d9039ce403bbe1d0ec7038033a0, Sequence #: 2. Contents: First message Processing message. Session: 311a216a560c47d184f9831984e6ac1d, Sequence #: 3. Contents: Second message Processing message. Session: f9a871be07414baf9505f2c3d466c4ab, Sequence #: 4. Contents: Third message Stopping and closing the processor
Op de pagina Overzicht voor de Service Bus-naamruimte in Azure Portal ziet u het aantal inkomende en uitgaande berichten. Wacht een minuut of zo en vernieuw de pagina om de meest recente waarden te zien.
Selecteer de wachtrij op de pagina Overzicht om naar de pagina Service Bus-wachtrij te gaan. U ziet ook de inkomende en uitgaande berichten op deze pagina. U ziet ook andere informatie, zoals de huidige grootte van de wachtrij en de maximale grootte, het aantal actieve berichten.
Verwante inhoud
Raadpleeg de volgende documentatie en voorbeelden: