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 Anslut ionssträ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

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.11.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 till 4.17.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.

  1. 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-portalen.
    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
  2. Lägg till @EnableJms för att aktivera stöd för JMS-lyssnarens kommenterade slutpunkter. Använd JmsTemplate 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?

  3. Starta programmet. Du bör se Sending message och Hello 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.

Nästa steg