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
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.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 Siespring.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 wiespring.jms.servicebus.pool.max-connections
. Weitere Konfigurationseinstellungen für Pools, die mit dem Präfixspring.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 Siespring.jms.cache.enabled=true
fest, und lassen Siespring.jms.servicebus.pool.enabled
nicht festgelegt. Diese Factory verwendet eine einzige Verbindung für alle Aufrufe vonJmsTemplate
, 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 Siespring.jms.servicebus.pool.enabled=false
undspring.jms.cache.enabled=false
so fest, dassServiceBusJmsConnectionFactory
direkt und ohne Pooling oder Zwischenspeicherung verwendet werden soll. In diesem Modus erstellt jeder Aufruf vonJmsTemplate
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 MessageProducer
verwenden möchten, legen Sie spring.jms.cache.enabled
auf true
fest.
Proben
Weitere Informationen finden Sie in den Azure-spring-boot-samples Repository auf GitHub.