Använda JMS i Spring för att få åtkomst till Azure Service Bus
Den här självstudien visar hur du använder Spring Boot Starter för Azure Service Bus JMS för att skicka meddelanden till och ta emot meddelanden från Service Bus queues
och topics
.
Azure tillhandahåller en asynkron meddelandeplattform som kallas Azure Service Bus ("Service Bus") som baseras på standarden Advanced Message Queueing Protocol 1-0 ("AMQP 1.0"). Du kan använda Service Bus i flera olika Azure-plattformar som stöds.
Spring Boot Starter för Azure Service Bus JMS tillhandahåller Spring JMS-integrering med Service Bus.
I följande video beskrivs hur du integrerar Spring JMS-program med Azure Service Bus med JMS 2.0.
I den här självstudien innehåller vi två autentiseringsmetoder: Microsoft Entra-autentisering och SAS-autentisering (Signatur för delad åtkomst). Fliken Lösenordslös visar Microsoft Entra-autentiseringen och fliken Anslutningssträng visar SAS-autentiseringen.
Microsoft Entra-autentisering är en mekanism för att ansluta till Azure Service Bus JMS med hjälp av identiteter som definierats i Microsoft Entra-ID. Med Microsoft Entra-autentisering kan du hantera databasanvändares identiteter och andra Microsoft-tjänster på en central plats, vilket förenklar behörighetshanteringen.
SAS-autentisering använder anslutningssträng i ditt Azure Service Bus-namnområde för delegerad åtkomst till Service Bus JMS. Om du väljer att använda signaturer för delad åtkomst som autentiseringsuppgifter måste du hantera anslutningssträng själv.
Förutsättningar
En Azure-prenumeration – skapa en kostnadsfritt.
Java Development Kit (JDK) version 8 eller senare.
Apache Maven, version 3.2 eller senare.
En kö eller ett ämne för Azure Service Bus. Om du inte har något kan du läsa Använda Azure Portal för att skapa ett Service Bus-namnområde och en kö eller Använd Azure Portal för att skapa ett Service Bus-ämne och prenumerationer i ämnet.
Ett Spring Boot-program. Om du inte har ett skapar du ett Maven-projekt med Spring Initializr. Se till att välja Maven Project och under Beroenden lägger du till Spring Web-beroendet och väljer sedan Java version 8 eller senare.
Viktigt!
Spring Boot version 2.5 eller senare krävs för att slutföra stegen i den här självstudien.
Skicka och ta emot meddelanden från Azure Service Bus
Med en kö eller ett ämne för Azure Service Bus kan du skicka och ta emot meddelanden med Spring Cloud Azure Service Bus JMS.
Om du vill installera Spring Cloud Azure Service Bus JMS Starter-modulen lägger du till följande beroenden i din pom.xml-fil :
Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Kommentar
Om du använder Spring Boot 2.x måste du ange
spring-cloud-azure-dependencies
versionen till4.19.0
. Den här strukturlistan (BOM) bör konfigureras i avsnittet i<dependencyManagement>
din pom.xml-fil . Detta säkerställer att alla Spring Cloud Azure-beroenden använder samma version. Mer information om vilken version som används för den här strukturlistan finns i Vilken version av Spring Cloud Azure ska jag använda.Spring Cloud Azure Service Bus JMS Starter-artefakten:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId> </dependency>
Koda appen
Använd följande steg för att konfigurera ditt program att använda en Service Bus-kö eller ett ämne för att skicka och ta emot meddelanden.
Konfigurera autentiseringsuppgifterna för Service Bus genom att lägga till följande egenskaper i filen application.properties .
Kommentar
Azure Service Bus JMS stöder användning av Microsoft Entra-ID för att auktorisera begäranden till Service Bus-resurser. Med Microsoft Entra-ID kan du använda rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att bevilja behörigheter till ett säkerhetsobjekt, som kan vara en användare eller ett huvudnamn för programtjänsten.
Viktigt!
Innan du börjar kontrollerar du att du har tilldelat rollen Azure Service Bus-dataägare till det Microsoft Entra-konto som du använder för närvarande. Mer information finns i Tilldela Azure-roller med Azure-portalen.
spring.jms.servicebus.namespace=<ServiceBusNamespace> spring.jms.servicebus.pricing-tier=<ServiceBusPricingTier> spring.jms.servicebus.passwordless-enabled=true spring.jms.listener.receive-timeout=60000
I följande tabell beskrivs fälten i konfigurationen:
Fält beskrivning spring.jms.servicebus.namespace
Ange det namnområde som du fick i Service Bus-tjänstinstansen från Azure Portal. spring.jms.servicebus.pricing-tier
Ange prisnivån för servicebussen. Värden som stöds är premium och standard. Premium-nivån använder Java Message Service (JMS) 2.0, medan standardnivån använder JMS 1.1 för att interagera med Azure Service Bus. spring.jms.servicebus.passwordless-enabled
Ange om lösenordslös ska användas. spring.jms.listener.receive-timeout
Som standard är tidsgränsvärdet för mottagningen 1 000. Vi rekommenderar att du anger 60000 Lägg till
@EnableJms
för att aktivera stöd för JMS-lyssnarens kommenterade slutpunkter. AnvändJmsTemplate
för att skicka meddelanden och@JmsListener
ta emot meddelanden, som du ser i följande exempel:import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.jms.annotation.EnableJms; import org.springframework.boot.CommandLineRunner; import org.springframework.jms.annotation.JmsListener; import org.springframework.jms.core.JmsTemplate; @SpringBootApplication @EnableJms public class ServiceBusJMSQueueApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(ServiceBusJMSQueueApplication.class); private static final String QUEUE_NAME = "<QueueName>"; @Autowired private JmsTemplate jmsTemplate; public static void main(String[] args) { SpringApplication.run(ServiceBusJMSQueueApplication.class, args); } @Override public void run(String... args) { LOGGER.info("Sending message"); jmsTemplate.convertAndSend(QUEUE_NAME, "Hello World"); } @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory") public void receiveMessage(String message) { LOGGER.info("Message received: {}", message); } }
Ersätt
<QueueName>
med ett eget könamn som konfigurerats i namnområdet för din Service Bus.Dricks
I den här självstudien finns det inga autentiseringsåtgärder i konfigurationerna eller koden. Att ansluta till Azure-tjänster kräver dock autentisering. För att slutföra autentiseringen måste du använda Azure Identity. Spring Cloud Azure använder
DefaultAzureCredential
, som Azure Identity-biblioteket tillhandahåller för att hjälpa dig att få autentiseringsuppgifter utan några kodändringar.DefaultAzureCredential
stöder flera autentiseringsmetoder och avgör vilken metod som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (till exempel lokala miljöer och produktionsmiljöer) utan att implementera miljöspecifik kod. Mer information finns i DefaultAzureCredential.För att slutföra autentiseringen i lokala utvecklingsmiljöer kan du använda Azure CLI, Visual Studio Code, PowerShell eller andra metoder. Mer information finns i Azure-autentisering i Java-utvecklingsmiljöer. För att slutföra autentiseringen i Azure-värdmiljöer rekommenderar vi att du använder användartilldelad hanterad identitet. Mer information finns i Vad är hanterade identiteter för Azure-resurser?
Starta programmet. Du bör se
Sending message
ochHello World
publiceras i programloggen enligt följande exempelutdata:Sending message Message received: Hello World
Distribuera till Azure Spring Apps
Nu när Spring Boot-programmet körs lokalt är det dags att flytta det till produktion. Azure Spring Apps gör det enkelt att distribuera Spring Boot-program till Azure utan några kodändringar. Tjänsten hanterar infrastrukturen för Spring-program så att utvecklare kan fokusera på sin kod. Azure Spring Apps tillhandahåller livscykelhantering med omfattande övervakning och diagnostik, konfigurationshantering, tjänstidentifiering, CI/CD-integrering, blågröna distributioner med mera. Information om hur du distribuerar ditt program till Azure Spring Apps finns i Distribuera ditt första program till Azure Spring Apps.