Teilen über


Verwenden von JMS in Spring für den Zugriff auf Azure Service Bus

In diesem Tutorial wird veranschaulicht, wie Spring Boot-Starter für Azure Service Bus JMS zum Senden und Empfangen von Nachrichten von queues und topics von Service Bus verwendet wird.

Azure stellt eine asynchrone Nachrichtenplattform namens Azure Service Bus (auch „Service Bus“) bereit, die auf dem Standard AMQP 1.0 („Advanced Message Queueing Protocol 1.0“) basiert. Sie können Service Bus auf allen unterstützten Azure-Plattformen verwenden.

Der Spring Boot-Starter für Azure Service Bus JMS bietet Spring JMS-Integration in Service Bus.

Im folgenden Video wird beschrieben, wie Spring JMS-Anwendungen mithilfe von JMS 2.0 in Azure Service Bus integriert werden:


In diesem Tutorial werden zwei Authentifizierungsmethoden vorgestellt: Microsoft Entra Authentifizierung und SAS-Authentifizierung (Shared Access Signatures). Auf der Registerkarte Kennwortlos wird die Microsoft Entra Authentifizierung und auf der Registerkarte Verbindungszeichenfolge die SAS-Authentifizierung angezeigt.

Die Microsoft Entra-Authentifizierung ist ein Mechanismus zur Verbindung mit Azure Service Bus JMS unter Verwendung der in Microsoft Entra ID definierten Identitäten. Mit der Microsoft Entra-Authentifizierung können Sie Datenbankbenutzeridentitäten und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird.

Die SAS-Authentifizierung verwendet die Verbindungszeichenfolge Ihres Azure Service Bus-Namespaces für den delegierten Zugriff auf Service Bus JMS. Wenn Sie sich dafür entscheiden, Signaturen für den freigegebenen Zugriff als Anmeldeinformationen zu verwenden, müssen Sie die Verbindungszeichenfolge selbst verwalten.

Voraussetzungen

Wichtig

Für die Schritte in diesem Tutorial wird mindestens die Spring Boot-Version 2.5 benötigt.

Senden und Empfangen von Nachrichten von Azure Service Bus

Mit einer Warteschlange oder einem Thema für Azure Service Bus können Sie Nachrichten mit Spring Cloud Azure Service Bus JMS senden und empfangen.

Um das Spring Cloud Azure Service Bus JMS-Startermodul zu installieren, fügen Sie Ihrer pom.xml-Datei die folgenden Abhängigkeiten hinzu:

  • Die Spring Cloud Azure Bill of Materials (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.16.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Hinweis

    Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die spring-cloud-azure-dependencies Version auf 4.19.0 festlegen. Diese Stückliste (Bill of Material, BOM) sollte im <dependencyManagement> Abschnitt Ihrer pom.xml Datei konfiguriert werden. Dadurch wird sichergestellt, dass alle Spring Cloud Azure-Abhängigkeiten dieselbe Version verwenden. Weitere Informationen zu der Version, die für diese BOM verwendet wird, finden Sie unter Welche Version von Spring Cloud Azure sollte ich verwenden.

  • Das Spring Cloud Azure Service Bus JMS Starter-Artefakt:

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

Codieren der Anwendung

Führen Sie die folgenden Schritte aus, um Ihre Anwendung so zu konfigurieren, dass eine Service Bus-Warteschlange oder ein Thema zum Senden und Empfangen von Nachrichten verwendet wird.

  1. Konfigurieren Sie die Service Bus-Anmeldeinformationen, indem Sie der Datei application.properties die folgenden Eigenschaften hinzufügen.

    Hinweis

    Azure Service Bus JMS unterstützt die Verwendung der Microsoft Entra ID zum Autorisieren von Anforderungen an Service Bus-Ressourcen. Mit Microsoft Entra ID können Sie die rollenbasierte Zugriffssteuerung von Azure (Azure RBAC) zum Gewähren von Berechtigungen für einen Sicherheitsprinzipal verwenden, bei dem es sich um einen Benutzer oder einen Anwendungsdienstprinzipal handeln kann.

    Wichtig

    Bevor Sie beginnen, stellen Sie sicher, dass Sie die Azure Service Bus Data Owner-Rolle dem Microsoft Entra-Konto zugewiesen haben, das Sie derzeit verwenden. Weitere Informationen finden Sie unter Weisen Sie Azure-Rollen über das Azure-Portal zu.

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

    In der folgenden Tabelle werden die Felder der Konfiguration beschrieben:

    Feld Beschreibung
    spring.jms.servicebus.namespace Geben Sie den Namespace an, den Sie in der Service Bus Service-Instanz vom Azure-Portal erhalten haben.
    spring.jms.servicebus.pricing-tier Geben Sie den Tarif für Ihre Service Bus-Instanz an. Unterstützte Werte sind Premium und Standard. Premiumebene verwendet Java Message Service (JMS) 2.0, während die Standardebene JMS 1.1 für die Interaktion mit Azure Service Bus verwenden.
    spring.jms.servicebus.passwordless-enabled Geben Sie an, ob „kennwortlos” verwendet werden soll.
    spring.jms.listener.receive-timeout Standardmäßig beträgt der Wert für das Empfangs-Timeout 1000. Wir empfehlen, den Wert auf 60000 zu setzen.
  2. Fügen Sie @EnableJms hinzu, um Unterstützung für annotierte JMS-Listener-Endpunkte zu aktivieren. Verwenden Sie JmsTemplate, um Nachrichten zu senden und @JmsListener um Nachrichten zu empfangen, wie im folgenden Beispiel gezeigt:

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

    Ersetzen Sie <QueueName> durch den Namen Ihrer eigenen Warteschlange, der in Ihrem Service Bus-Namespace konfiguriert ist.

    Tipp

    In diesem Lernprogramm gibt es keine Authentifizierungsvorgänge in den Konfigurationen oder im Code. Für die Verbindung mit dem Azure-Diensten ist jedoch eine Authentifizierung erforderlich. Um die Authentifizierung abzuschließen, müssen Sie Azure Identity verwenden. Spring Cloud Azure verwendet DefaultAzureCredential, was die Azure Identity-Bibliothek bereitstellt, um Sie beim Abrufen von Anmeldeinformationen ohne Codeänderungen zu unterstützen.

    DefaultAzureCredential“ unterstützt mehrere Authentifizierungsmethoden und bestimmt, welche Methode zur Laufzeit verwendet wird. Mit diesem Ansatz kann Ihre Anwendung verschiedene Authentifizierungsmethoden in unterschiedlichen Umgebungen verwenden (z. B. in lokalen oder Produktionsumgebungen), ohne dass umgebungsspezifischer Code implementiert werden muss. Weitere Informationen finden Sie unter DefaultAzureCredential.

    Um die Authentifizierung in lokalen Entwicklungsumgebungen abzuschließen, können Sie Azure CLI, Visual Studio Code, PowerShell oder andere Methoden verwenden. Weitere Informationen finden Sie unter Azure-Authentifizierung in Java-Entwicklungsumgebungen. Um die Authentifizierung in Azure-Hostingumgebungen abzuschließen, empfehlen wir die Verwendung einer benutzerzugewiesenen verwalteten Identität. Weitere Informationen finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?.

  3. Starten Sie die Anwendung. Wie in der folgenden Beispielausgabe gezeigt, sollten Sie das Anwendungsprotokoll Sending message anzeigen und Hello World veröffentlichen:

    Sending message
    Message received: Hello World
    

Bereitstellen in Azure Spring Apps

Nachdem Sie nun die Spring Boot-Anwendung lokal ausgeführt haben, ist es an der Zeit, sie in die Produktion zu verschieben. Mit Azure Spring Apps lassen sich Spring Boot-Anwendungen ganz einfach und ohne Codeänderungen in Azure bereitstellen. Der Dienst verwaltet die Infrastruktur von Spring-Anwendungen und ermöglicht es Entwicklern dadurch, sich auf ihren Code zu konzentrieren. Azure Spring Apps bietet eine Lebenszyklusverwaltung mit umfassender Überwachung und Diagnose, Konfigurationsverwaltung, Dienstermittlung, CI/CD-Integration, Blau/Grün-Bereitstellungen und mehr. Informationen zum Bereitstellen Ihrer Anwendung in Azure Spring Apps finden Sie unter Bereitstellen Ihrer ersten Anwendung in Azure Spring Apps.

Nächste Schritte