Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här snabbstarten innehåller stegvisa instruktioner för ett enkelt scenario med att skicka meddelanden till en Service Bus-kö och ta emot dem. Du skapar en Java-app för att skicka meddelanden till och ta emot meddelanden från en Azure Service Bus-kö. Du hittar fördefinierade Java-exempel för Azure Service Bus i Azure SDK för Java-lagringsplatsen på GitHub.
Tips/Råd
Om du arbetar med Azure Service Bus-resurser i ett Spring-program rekommenderar vi att du överväger Spring Cloud Azure. Spring Cloud Azure är ett projekt med öppen källkod som ger sömlös Spring-integrering med Azure-tjänster. Mer information om Spring Cloud Azure och ett exempel med Service Bus finns i Spring Cloud Stream med Azure Service Bus.
Förutsättningar
Ett Azure-abonnemang. För att slutföra den här snabbstarten behöver du ett Azure-konto. Du kan aktivera dina månatliga Azure-krediter för Visual Studio-prenumeranter eller registrera dig för ett kostnadsfritt konto.
Installera Azure SDK för Java.
- Om du använder Eclipse kan du installera Azure Toolkit for Eclipse som innehåller Azure SDK för Java. Du kan sedan lägga till Microsoft Azure Libraries for Java i projektet.
- Om du använder IntelliJ läser du Installera Azure Toolkit for IntelliJ.
Skapa ett namnområde i Azure Portal
Om du vill börja använda Service Bus-meddelandeentiteter i Azure skapar du ett namnområde med ett namn som är unikt i Hela Azure. Ett namnområde tillhandahåller en omfångscontainer för Service Bus-resurser, till exempel köer och ämnen, i ditt program.
Så här skapar du ett namnområde:
Logga in på Azure-portalen.
Välj den utfällbara menyn längst upp till vänster och gå till sidan Alla tjänster.
I det vänstra navigeringsfältet väljer du Integrering.
Rulla ned till Messaging Services>Service Bus och välj Skapa.
Följ dessa steg på fliken Grundläggande på sidan Skapa namnområde :
För Prenumeration väljer du en Azure-prenumeration där du ska skapa namnrymden.
För Resursgrupp väljer du en befintlig resursgrupp eller skapar en ny.
Ange ett namnområdesnamn som uppfyller följande namngivningskonventioner:
- Namnet måste vara unikt i Hela Azure. Systemet kontrollerar omedelbart om namnet är tillgängligt.
- Namnlängden är minst 6 och högst 50 tecken.
- Namnet får endast innehålla bokstäver, siffror, bindestreck
-. - Namnet måste börja med en bokstav och sluta med en bokstav eller siffra.
- Namnet slutar inte med
-sbeller-mgmt.
För Plats väljer du den region som ska vara värd för ditt namnområde.
För Prisnivå väljer du prisnivån (Basic, Standard eller Premium) för namnområdet. För den här snabbstarten väljer du Standard.
Om du väljer Premium-nivå kan du aktivera geo-replikering för namnområdet. Geo-replikeringsfunktionen säkerställer att metadata och data i ett namnområde kontinuerligt replikeras från en primär region till en eller flera sekundära regioner.
Viktigt!
Om du vill använda ämnen och prenumerationer väljer du antingen Standard eller Premium. Ämnen och prenumerationer stöds inte på prisnivån Basic.
Om du har valt prisnivån Premium anger du antalet meddelandeenheter. Premium-nivån ger resursisolering på processor- och minnesnivå så att varje arbetsbelastning körs självständigt. Den här resurscontainern kallas för en meddelandefunktionsenhet. Ett premiumnamnområde har minst en meddelandeenhet. Du kan välja 1, 2, 4, 8 eller 16 meddelandeenheter för varje Service Bus Premium-namnområde. Mer information finns i Service Bus Premium-meddelandenivån.
Välj Granska och skapa längst ned på sidan.
På sidan Granska + skapa granskar du inställningarna och väljer Skapa.
När distributionen av resursen har slutförts väljer du Gå till resurs på distributionssidan.
Startsidan för din Service Bus-namnrymd visas.
Skapa en kö i Azure-portalen
På sidan Service Bus-namnområde expanderar du Entiteter på navigeringsmenyn till vänster och väljer Köer.
På sidan Köer, i verktygsfältet väljer du + Kö.
Ange ett namn för kön. Lämna de andra värdena med sina standardvärden.
Välj Skapa.
Autentisera appen till Azure
Den här artikeln visar två sätt att ansluta till Azure Service Bus: lösenordslös och anslutningssträng.
Det första alternativet visar hur du använder ditt säkerhetsobjekt i Microsoft Entra-ID och rollbaserad åtkomstkontroll (RBAC) för att ansluta till ett Service Bus-namnområde. Du behöver inte bekymra dig om att ha en hårdkodad anslutningssträng i koden, i en konfigurationsfil eller i en säker lagring som Azure Key Vault.
Det andra alternativet visar hur du använder en anslutningssträng för att ansluta till ett Service Bus-namnområde. Om du inte har använt Azure tidigare kan det vara enklare att följa anslutningssträng alternativet. Vi rekommenderar att du använder det lösenordslösa alternativet i verkliga program och produktionsmiljöer. Mer information finns i Service Bus-autentisering och auktorisering. Mer information om lösenordslös autentisering finns i Autentisera .NET-appar.
Tilldela roller till din Microsoft Entra-användare
När du utvecklar lokalt kontrollerar du att användarkontot som ansluter till Azure Service Bus har rätt behörigheter. Du behöver rollen Azure Service Bus-dataägare för att kunna skicka och ta emot meddelanden. Om du vill tilldela dig själv den här rollen behöver du rollen Administratör för användaråtkomst eller en annan roll som innehåller åtgärden Microsoft.Authorization/roleAssignments/write .
Du kan tilldela Azure RBAC-roller till en användare med hjälp av Azure Portal, Azure CLI eller Azure PowerShell. Mer information om tillgängliga omfång för rolltilldelningar finns i Förstå omfånget för Azure RBAC.
I följande exempel tilldelas Azure Service Bus Data Owner rollen till ditt användarkonto, vilket ger fullständig åtkomst till Azure Service Bus-resurser. I ett verkligt scenario följer du principen om minsta behörighet för att ge användarna endast de minsta behörigheter som krävs för en säkrare produktionsmiljö.
Inbyggda Azure-roller för Azure Service Bus
För Azure Service Bus skyddas redan hanteringen av namnområden och alla relaterade resurser via Azure-portalen och Azure-resurshanterings-API:et med hjälp av Azure RBAC-modellen. Azure tillhandahåller följande inbyggda Azure-roller för att auktorisera åtkomst till ett Service Bus-namnområde:
- Azure Service Bus-dataägare: Ger dataåtkomst till Service Bus-namnområdet och dess entiteter, inklusive köer, ämnen, prenumerationer och filter. En medlem i den här rollen kan skicka och ta emot meddelanden från köer eller ämnen/prenumerationer.
-
Azure Service Bus-datasändare: Använd den här rollen för att ge
sendåtkomst till Service Bus-namnområdet och dess entiteter. -
Azure Service Bus-datamottagare: Använd den
receivehär rollen för att ge åtkomst till Service Bus-namnområdet och dess entiteter.
Om du vill skapa en anpassad roll läser du Rättigheter som krävs för Service Bus-åtgärder.
Lägga till Microsoft Entra-användare i rollen Som Azure Service Bus-ägare
Lägg till ditt Microsoft Entra-användarnamn i rollen Azure Service Bus-dataägare på Service Bus-namnområdesnivå. Med den här konfigurationen kan en app som körs i kontexten för ditt användarkonto skicka meddelanden till en kö eller ett ämne. Den kan ta emot meddelanden från en kö eller ett ämnesprenumeration.
Viktigt!
I de flesta fall tar det en minut eller två för rolltilldelningen att spridas i Azure. I sällsynta fall kan det ta upp till åtta minuter. Om du får autentiseringsfel när du först kör koden väntar du en stund och försöker igen.
Om du inte har sidan Service Bus-namnområde öppen i Azure-portalen letar du upp Service Bus-namnområdet med hjälp av huvudsökfältet eller det vänstra navigeringsfältet.
På sidan Översikt väljer du Åtkomstkontroll (IAM) på den vänstra menyn.
På sidan Åtkomstkontroll (IAM) väljer du fliken Rolltilldelningar .
Välj + Lägg till på den översta menyn och sedan Lägg till rolltilldelning.
Använd sökrutan för att filtrera resultatet till önskad roll. I det här exemplet, sök efter
Azure Service Bus Data Owneroch välj resultatet som matchar. Välj sedan Nästa.Under Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn och sedan + Välj medlemmar.
I dialogrutan söker du efter ditt Microsoft Entra-användarnamn (vanligtvis din user@domain e-postadress) och väljer sedan Välj längst ned i dialogrutan.
Välj Granska + tilldela för att gå till den sista sidan och välj sedan Granska + tilldela igen för att avsluta processen.
Skicka meddelanden till en kö
I det här avsnittet skapar du ett Java-konsolprojekt och lägger till kod för att skicka meddelanden till kön som du skapade tidigare.
Skapa ett Java-konsolprojekt
Skapa ett Java-projekt med Eclipse eller ett valfritt verktyg.
Konfigurera ditt program så att det använder Service Bus
Lägg till referenser till Azure Core- och Azure Service Bus-bibliotek.
Om du använder Eclipse och har skapat ett Java-konsolprogram konverterar du Java-projektet till en Maven: högerklicka på projektet i fönstret Paketutforskaren . Välj Konfigurera>Konvertera till Maven-projekt. Lägg sedan till beroenden i dessa två bibliotek enligt följande exempel.
pom.xml Uppdatera filen för att lägga till beroenden i Azure Service Bus- och Azure Identity-paket.
<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>
Lägg till kod för att skicka meddelanden till kön
Lägg till följande
importinstruktioner i början av Java-filen.import com.azure.messaging.servicebus.*; import com.azure.identity.*; import java.util.concurrent.TimeUnit; import java.util.Arrays; import java.util.List;I klassen definiera variabler för att innehålla anslutningssträngen och kö namnet.
static String queueName = "<QUEUE NAME>";Viktigt!
Ersätt
<QUEUE NAME>med namnet på kön.Lägg till en metod med namnet
sendMessagei klassen för att skicka ett meddelande till kön.Viktigt!
Ersätt
NAMESPACENAMEmed namnet på Service Bus-namnområdet.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); }Lägg till en metod med namnet
createMessagesi klassen för att skapa en lista med meddelanden. Vanligtvis får du dessa meddelanden från olika delar av programmet. I det här exemplet använder du en lista med exempelmeddelanden.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); }Lägg till en metod med namnet
sendMessageBatchmetod för att skicka meddelanden till kön som du skapade. Den här metoden skapar enServiceBusSenderClientför kön, anroparcreateMessagesmetoden för att hämta listan över meddelanden, förbereder en eller flera batchar och skickar batcharna till kön.Viktigt!
Ersätt
NAMESPACENAMEmed namnet på Service Bus-namnområdet.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(); }
Ta emot meddelanden från en kö
I det här avsnittet lägger du till kod för att hämta meddelanden från kön.
Lägg till en metod med namnet
receiveMessagesför att ta emot meddelanden från kön. Den här metoden skapar enServiceBusProcessorClientför kön genom att ange en hanterare för bearbetning av meddelanden och en annan för hantering av fel. Sedan startar processorn, väntar i några sekunder, skriver ut de meddelanden som tas emot och stoppar och stänger sedan processorn.Viktigt!
- Ersätt
NAMESPACENAMEmed namnet på Service Bus-namnområdet.
// 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(); }- Ersätt
processMessageLägg till metoden för att bearbeta ett meddelande som tas emot från Service Bus-prenumerationen.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()); }processErrorLägg till metoden för att hantera felmeddelanden.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()); } }mainUppdatera metoden för att anropasendMessage,sendMessageBatchochreceiveMessagesmetoder och för att utlösaInterruptedException.public static void main(String[] args) throws InterruptedException { sendMessage(); sendMessageBatch(); receiveMessages(); }
Kör appen
Om du använder Eclipse högerklickar du på projektet, väljer Exportera, expanderar Java, väljer Körbar JAR-fil och följer stegen för att skapa en runnable JAR-fil.
Om du är signerad under ett användarkonto som skiljer sig från det som du har lagt till i azure Service Bus-dataägarrollen följer du dessa steg. Annars går du vidare för att köra Jar-filen i nästa steg.
Installera Azure CLI på datorn.
Kör följande CLI-kommando för att logga in på Azure. Använd samma användarkonto som du lade till i rollen Azure Service Bus-dataägare .
az login
Kör Jar-filen med hjälp av följande kommando.
java -jar <JAR FILE NAME>Du ser följande utdata i konsolfönstret.
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
På sidan Översikt för Service Bus-namnområdet i Azure-portalen kan du se antal inkommande och utgående meddelanden. Vänta i en minut eller så och uppdatera sedan sidan för att se de senaste värdena.
Välj kön på den här översiktssidan för att gå till sidan Service Bus-kö . Du ser också antalet inkommande och utgående meddelanden på den här sidan. Du ser också annan information såsom aktuella storlek på kön, maximal storlek och antal aktiva meddelanden.
Relaterat innehåll
Se följande dokumentation och exempel: