JMS in Spring gebruiken voor toegang tot Azure Service Bus

Deze zelfstudie laat zien hoe u Spring Boot Starter voor Azure Service Bus JMS gebruikt om berichten te verzenden naar en te ontvangen van Service Bus queues en topics.

Azure biedt een platform voor asynchrone berichtenuitwisseling met de naam Azure Service Bus ('Service Bus') dat is gebaseerd op de standaard Advanced Message Queueing Protocol 1.0 ('AMQP 1.0'). U kunt Service Bus gebruiken in het bereik van ondersteunde Azure-platforms.

Spring Boot Starter voor Azure Service Bus JMS biedt Spring JMS-integratie met Service Bus.

In de volgende video wordt beschreven hoe u Spring JMS-toepassingen integreert met Azure Service Bus met behulp van JMS 2.0.


In deze zelfstudie bevatten we twee verificatiemethoden: Microsoft Entra-verificatie en SAS-verificatie (Shared Access Signatures). Het tabblad Wachtwoordloos toont de Microsoft Entra-verificatie en het tabblad Verbinding maken iontekenreeks toont de SAS-verificatie.

Microsoft Entra-verificatie is een mechanisme voor het maken van verbinding met Azure Service Bus JMS met behulp van identiteiten die zijn gedefinieerd in Microsoft Entra-id. Met Microsoft Entra-verificatie kunt u databasegebruikersidentiteiten en andere Microsoft-services op een centrale locatie beheren, waardoor het beheer van machtigingen wordt vereenvoudigd.

SAS-verificatie maakt gebruik van de verbindingsreeks van uw Azure Service Bus-naamruimte voor de gedelegeerde toegang tot Service Bus JMS. Als u Shared Access Signatures als referenties wilt gebruiken, moet u de verbindingsreeks zelf beheren.

Vereisten

Belangrijk

Spring Boot versie 2.5 of hoger is vereist om de stappen in deze zelfstudie uit te voeren.

Berichten verzenden en ontvangen van Azure Service Bus

Met een wachtrij of onderwerp voor Azure Service Bus kunt u berichten verzenden en ontvangen met behulp van Spring Cloud Azure Service Bus JMS.

Als u de Spring Cloud Azure Service Bus JMS Starter-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :

  • De 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>
    

    Notitie

    Als u Spring Boot 2.x gebruikt, moet u de spring-cloud-azure-dependencies versie instellen op 4.17.0. Deze stuklijst (Bill of Material) moet worden geconfigureerd in de <dependencyManagement> sectie van uw pom.xml-bestand . Dit zorgt ervoor dat alle Spring Cloud Azure-afhankelijkheden dezelfde versie gebruiken. Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.

  • Het Spring Cloud Azure Service Bus JMS Starter-artefact:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
    </dependency>
    

De toepassing coderen

Gebruik de volgende stappen om uw toepassing te configureren voor het gebruik van een Service Bus-wachtrij of -onderwerp voor het verzenden en ontvangen van berichten.

  1. Configureer de Service Bus-referenties door de volgende eigenschappen toe te voegen aan het bestand application.properties .

    Notitie

    Azure Service Bus JMS ondersteunt het gebruik van Microsoft Entra ID om aanvragen voor Service Bus-resources te autoriseren. Met Microsoft Entra ID kunt u op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) gebruiken om machtigingen te verlenen aan een beveiligingsprincipaal. Dit kan een gebruiker of toepassingsservice-principal zijn.

    Belangrijk

    Voordat u begint, moet u ervoor zorgen dat u de rol Azure Service Bus-gegevenseigenaar hebt toegewezen aan het Microsoft Entra-account dat u momenteel gebruikt. Zie voor meer informatie Azure-rollen toewijzen met behulp van de Azure-portal.

    spring.jms.servicebus.namespace=<ServiceBusNamespace>
    spring.jms.servicebus.pricing-tier=<ServiceBusPricingTier>
    spring.jms.servicebus.passwordless-enabled=true
    spring.jms.listener.receive-timeout=60000
    

    In de volgende tabel worden de velden in de configuratie beschreven:

    Veld Beschrijving
    spring.jms.servicebus.namespace Geef de naamruimte op die u hebt verkregen in uw Service Bus-service-exemplaar vanuit Azure Portal.
    spring.jms.servicebus.pricing-tier Geef de prijscategorie van uw servicebus op. Ondersteunde waarden zijn Premium en Standard. Premium-laag maakt gebruik van Java Message Service (JMS) 2.0, terwijl de standard-laag JMS 1.1 gebruikt om te communiceren met Azure Service Bus.
    spring.jms.servicebus.passwordless-enabled Geef op of u wachtwoordloos wilt gebruiken.
    spring.jms.listener.receive-timeout De time-outwaarde voor ontvangen is standaard 1000. U wordt aangeraden deze in te stellen op 60000
  2. Voeg @EnableJms toe om ondersteuning in te schakelen voor met JMS-listener geannoteerde eindpunten. Gebruik JmsTemplate dit om berichten te verzenden en @JmsListener berichten te ontvangen, zoals wordt weergegeven in het volgende voorbeeld:

    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);
        }
    
    }
    

    Vervang <QueueName> door uw eigen wachtrijnaam die is geconfigureerd in uw Service Bus-naamruimte.

    Tip

    In deze zelfstudie zijn er geen verificatiebewerkingen in de configuraties of de code. Voor het maken van verbinding met Azure-services is echter verificatie vereist. Als u de verificatie wilt voltooien, moet u Azure Identity gebruiken. Spring Cloud Azure maakt gebruik DefaultAzureCredentialvan, die de Azure Identity-bibliotheek biedt om u te helpen referenties op te halen zonder dat er codewijzigingen zijn aangebracht.

    DefaultAzureCredential ondersteunt meerdere verificatiemethoden en bepaalt welke methode tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (zoals lokale en productieomgevingen) zonder omgevingsspecifieke code te implementeren. Zie DefaultAzureCredential voor meer informatie.

    Als u de verificatie in lokale ontwikkelomgevingen wilt voltooien, kunt u Azure CLI, Visual Studio Code, PowerShell of andere methoden gebruiken. Zie Azure-verificatie in Java-ontwikkelomgevingen voor meer informatie. Als u de verificatie in Azure-hostingomgevingen wilt voltooien, raden we u aan om een door de gebruiker toegewezen beheerde identiteit te gebruiken. Zie Wat zijn beheerde identiteiten voor Azure-resources? voor meer informatie.

  3. Start de toepassing. U zou het toepassingslogboek moeten zien Sending message en Hello World posten, zoals wordt weergegeven in de volgende voorbeelduitvoer:

    Sending message
    Message received: Hello World
    

Implementeren in Azure Spring Apps

Nu de Spring Boot-toepassing lokaal wordt uitgevoerd, is het tijd om deze naar productie te verplaatsen. Met Azure Spring Apps kunt u Eenvoudig Spring Boot-toepassingen implementeren in Azure zonder codewijzigingen. De service beheert de infrastructuur van Spring-toepassingen, zodat ontwikkelaars zich kunnen richten op hun code. Azure Spring Apps biedt levenscyclusbeheer met uitgebreide bewaking en diagnose, configuratiebeheer, servicedetectie, CI/CD-integratie, blauwgroene implementaties en meer. Zie Uw eerste toepassing implementeren in Azure Spring Apps om uw toepassing te implementeren in Azure Spring Apps.

Volgende stappen