Freigeben über


Verwenden von Azure Service Bus mit JMS

Dieser Artikel gilt für:✅ Version 4.19.0 ✅ Version 5.19.0

In diesem Artikel wird beschrieben, wie Sie Azure Service Bus mit der JMS-API verwenden, die in das Spring JMS-Framework integriert ist.

Kernfunktionen

Kennwortlose Verbindung

Die kennwortlose Verbindung verwendet die Microsoft Entra-Authentifizierung zum Herstellen einer Verbindung mit Azure-Diensten, ohne Anmeldeinformationen in der Anwendung, den Konfigurationsdateien oder in Umgebungsvariablen zu speichern. Die Microsoft Entra-Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit Azure Service Bus mithilfe von Identitäten, die in der Microsoft Entra-ID definiert sind. Mit der Microsoft Entra-Authentifizierung können Sie Service Bus und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird.

Funktionsweise

Spring Cloud Azure erstellt zunächst je nach Anwendungsauthentifizierungskonfiguration eine der folgenden Arten von Anmeldeinformationen:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Wenn keine dieser Arten von Anmeldeinformationen gefunden wird, wird die Anmeldeinformationskette über DefaultTokenCredential verwendet, um Anmeldeinformationen von Anwendungseigenschaften, Umgebungsvariablen, verwalteter Identität oder IDEs abzurufen. Weitere Informationen finden Sie unter Spring Cloud Azure authentication.

Setup von Abhängigkeiten

Fügen Sie die folgenden Abhängigkeiten hinzu, wenn Sie Ihre Spring JMS-Anwendung migrieren möchten, um Azure Service Bus zu verwenden.

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

Konfiguration

In der folgenden Tabelle werden die konfigurierbaren Eigenschaften bei Verwendung der Spring JMS-Unterstützung beschrieben:

Eigentum Beschreibung
spring.jms.servicebus.connection-string Die Azure Service Bus-Verbindungszeichenfolge, wenn Sie die Verbindungszeichenfolge direkt bereitstellen möchten.
spring.jms.servicebus.topic-client-id Die JMS-Client-ID. Funktioniert nur für die topicJmsListenerContainerFactory Bohnen.
spring.jms.servicebus.enabled Ein Wert, der angibt, ob die Automatische Konfiguration von Service Bus JMS aktiviert werden soll. Der Standardwert ist true.
spring.jms.servicebus.idle-timeout Die Zeitüberschreitungsdauer der Verbindung, die angibt, wie lange der Client erwartet, dass service bus eine Verbindung aktiv bleibt, wenn keine Nachrichten übermittelt werden. Der Standardwert ist 2m.
spring.jms.servicebus.passwordless-enabled Gibt an, ob kennwortlos für Azure Service Bus JMS aktiviert werden soll. Der Standardwert ist false.
spring.jms.servicebus.pricing-tier Das Azure Service Bus-Preisniveau. Unterstützte Werte sind Premium- und Standard-. Premium-Stufe verwendet Java Message Service (JMS) 2.0, während die Standardebene JMS 1.1 für die Interaktion mit Azure Service Bus verwendet.
spring.jms.servicebus.listener.reply-pub-sub-domain Ein Wert, der angibt, ob der Antwortzieltyp ein Thema ist. Funktioniert nur für die topicJmsListenerContainerFactory Bohnen.
spring.jms.servicebus.listener.phase Die Phase, in der dieser Container gestartet und beendet werden soll.
spring.jms.servicebus.listener.reply-qos-settings Konfiguriert die beim Senden einer Antwort zu verwendende QosSettings.
spring.jms.servicebus.listener.subscription-durable Ein Wert, der angibt, ob das Abonnement dauerhaft sein soll. Funktioniert nur für die topicJmsListenerContainerFactory Bohnen. Der Standardwert ist true.
spring.jms.servicebus.listener.subscription-shared Ein Wert, der angibt, ob das Abonnement freigegeben werden soll. Funktioniert nur für die topicJmsListenerContainerFactory Bohnen.
spring.jms.servicebus.pool.block-if-full Ein Wert, der angibt, ob blockiert werden soll, wenn eine Verbindung angefordert wird und der Pool voll ist. Legen Sie ihn auf "false" fest, um stattdessen eine JMSException auszuwerfen.
spring.jms.servicebus.pool.block-if-full-timeout Der Sperrzeitraum, bevor eine Ausnahme ausgelöst wird, wenn der Pool noch voll ist.
spring.jms.servicebus.pool.enabled Ein Wert, der angibt, ob eine JmsPoolConnectionFactory erstellt werden soll, anstelle einer regulären ConnectionFactory.
spring.jms.servicebus.pool.idle-timeout Timeout des Verbindungspools im Leerlauf.
spring.jms.servicebus.pool.max-connections Die maximale Anzahl von poolierten Verbindungen.
spring.jms.servicebus.pool.max-sessions-per-connection Die maximale Anzahl von Poolsitzungen pro Verbindung im Pool.
spring.jms.servicebus.pool.time-between-expiration-check Die Zeit für den Ruhezustand zwischen Läufen des Leerlauf-Verbindungs-Eviction-Threads. Wenn negativ, wird kein Leerlaufverbindungsthread ausgeführt.
spring.jms.servicebus.pool.use-anonymous-producers Ein Wert, der angibt, ob nur eine anonyme MessageProducer Instanz verwendet werden soll. Legen Sie sie auf false fest, um jedes Mal eine MessageProducer zu erstellen.
spring.jms.servicebus.prefetch-policy.all Der Fallbackwert für die Option "Prefetch" in diesem Service Bus-Namespace. Der Standardwert ist 0.
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch Die Anzahl der Vorabstarts für ein dauerhaftes Thema. Der Standardwert ist 0.
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch Die Anzahl der Vorabrufe für den Warteschlangenbrowser. Der Standardwert ist 0.
spring.jms.servicebus.prefetch-policy.queue-prefetch Die Anzahl der Vorabrufe für die Warteschlange. Der Standardwert ist 0.
spring.jms.servicebus.prefetch-policy.topic-prefetch Die Anzahl der Vorabstarts für das Thema. Der Standardwert ist 0.

Anmerkung

Die allgemeine Spring JMS-Konfiguration wird für kurze Zeit weggelassen.

Weitere Informationen finden Sie unter Spring JMS Document.

Grundlegende Nutzung

Herstellen einer Verbindung mit Azure Service Bus JMS ohne Kennwort

Konfigurieren Sie die folgenden Eigenschaften in Ihrer application.yml Datei:

spring:
  jms:
    servicebus:
      namespace: ${AZURE_SERVICEBUS_NAMESPACE}
      pricing-tier: ${PRICING_TIER}
      passwordless-enabled: true

Wichtig

Azure Service Bus JMS unterstützt die Verwendung der Microsoft Entra-ID zum Autorisieren von Anforderungen an Service Bus-Ressourcen. Stellen Sie mit der Microsoft Entra-ID sicher, dass Sie dem microsoft Entra-Konto, das Sie derzeit verwenden, den Azure Service Bus Data Owner Rolle zugewiesen haben. Weitere Informationen finden Sie unter Zuweisen von Azure-Rollen mithilfe des Azure-Portals.

Herstellen einer Verbindung mit Azure Service Bus mit JMS verwenden verwaltete Identität

  1. Um die verwaltete Identität zu verwenden, aktivieren Sie die verwaltete Identität für Ihren Dienst, und weisen Sie die Azure Service Bus Data Owner Rolle zu. Weitere Informationen finden Sie unter Authentifizieren einer verwalteten Identität mit Microsoft Entra ID für den Zugriff auf Azure Service Bus-Ressourcen.

  2. Konfigurieren Sie die folgenden Eigenschaften in Ihrer application.yml Datei:

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
      jms:
        servicebus:
          namespace: ${AZURE_SERVICEBUS_NAMESPACE}
          pricing-tier: ${PRICING_TIER}
          passwordless-enabled: true
    

    Wichtig

    Wenn Sie die vom Benutzer zugewiesene verwaltete Identität verwenden, müssen Sie auch die Eigenschaft spring.cloud.azure.credential.client-id mit Ihrer vom Benutzer zugewiesenen verwalteten Identitätsclient-ID hinzufügen.

Herstellen einer Verbindung mit Azure Service Bus JMS mithilfe der Verbindungszeichenfolge

Fügen Sie die folgenden Eigenschaften hinzu, und Sie können loslegen.

spring:
  jms:
    servicebus:
      connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
      pricing-tier: ${PRICING_TIER}

Verbindungen

Spring Cloud Azure bietet die folgenden drei Verbindungsfactory-Optionen für die Verbindung mit Azure Service Bus JMS:

  • JmsPoolConnectionFactory: Legen Sie spring.jms.servicebus.pool.enabled=true fest, oder lassen Sie sowohl Pool- als auch Cacheeinstellungen deaktiviert, um den Standardwert zu verwenden. Diese Factory verwaltet einen Verbindungspool mit anpassbaren Optionen wie spring.jms.servicebus.pool.max-connections. Weitere Konfigurationseinstellungen für Pools, die mit dem Präfix spring.jms.servicebus.pool. versehen sind, sind im Abschnitt Configuration ausführlich beschrieben. Dieses Setup verbessert die Leistung, indem die Lastenausgleichsfunktion von Azure Service Bus genutzt wird und Datenverkehr über mehrere Endpunkte verteilt wird.

  • CachingConnectionFactory: Legen Sie spring.jms.cache.enabled=true fest, und lassen Sie spring.jms.servicebus.pool.enabled nicht festgelegt. Diese Factory verwendet eine einzige Verbindung für alle Aufrufe von JmsTemplate, wodurch der Aufwand für die Erstellung von Verbindungen reduziert wird, was ideal für Szenarien mit geringem Datenverkehr ist. Dieser Modus nutzt jedoch nicht die Lastenausgleichsfunktion von Azure Service Bus.

  • ServiceBusJmsConnectionFactory: Legen Sie spring.jms.servicebus.pool.enabled=false und spring.jms.cache.enabled=false so fest, dass ServiceBusJmsConnectionFactory direkt und ohne Pooling oder Zwischenspeicherung verwendet werden soll. In diesem Modus erstellt jeder Aufruf von JmsTemplate eine neue Verbindung, die ressourcenintensiv und weniger effizient sein kann.

Für optimale Leistung und Lastverteilung empfehlen wir die Verwendung von JmsPoolConnectionFactory durch Festlegen von spring.jms.servicebus.pool.enabled=true. Vermeiden Sie das Umbrechen einer JmsPoolConnectionFactory mit einem CachingConnectionFactory oder ServiceBusJmsConnectionFactory, da dadurch Poolvorteile vermieden werden können, was dazu führen kann, dass inaktive Verbindungen aufbewahrt werden, nachdem sie aus dem Pool entfernt wurden.

Anmerkung

Ab Spring Cloud Azure 5.19.0 wurde die Standard-ConnectionFactory auf JmsPoolConnectionFactory aktualisiert, um den Service Bus-Serverlastenausgleich besser zu verwenden. Wenn Sie die CachingConnectionFactory weiterhin zum Zwischenspeichern von Session und MessageProducerverwenden möchten, legen Sie spring.jms.cache.enabled auf truefest.

Proben

Weitere Informationen finden Sie in den Azure-spring-boot-samples Repository auf GitHub.