Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Microsoft Entra Authentifizierung zum Herstellen einer Verbindung mit Azure Diensten, ohne Anmeldeinformationen in der Anwendung, der zugehörigen Konfigurationsdateien oder in Umgebungsvariablen zu speichern. Microsoft Entra Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit Azure Service Bus mithilfe von in Microsoft Entra ID definierten Identitäten. Mit 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 einen der folgenden Arten von Anmeldeinformationen, je nach Anwendungsauthentifizierungskonfiguration:
ClientSecretCredentialClientCertificateCredentialUsernamePasswordCredentialManagedIdentityCredential
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 Service Bus automatische Konfiguration von JMS aktiviert werden soll. Der Standardwert ist true. |
spring.jms.servicebus.idle-timeout |
Die Dauer des Leerlaufs der Verbindung, die angibt, wie lange der Client erwartet, dass Service Bus eine Verbindung aktiv halten, 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. Die 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 Prefetch-Option 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 von Microsoft Entra ID, um Anforderungen an Service Bus Ressourcen zu autorisieren. Stellen Sie mit Microsoft Entra ID sicher, dass Sie dem aktuell verwendeten Microsoft Entra Konto die Rolle Azure Service Bus zugewiesen haben. Weitere Informationen finden Sie unter Assign 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 Rolle
Azure Service Bus Data Ownerzu. Weitere Informationen finden Sie unter Authenticate a managed identity with Microsoft Entra ID to access Azure Service Bus resources.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: trueWichtig
Wenn Sie die vom Benutzer zugewiesene verwaltete Identität verwenden, müssen Sie auch die Eigenschaft
spring.cloud.azure.credential.client-idmit Ihrer vom Benutzer zugewiesenen verwalteten Identitätsclient-ID hinzufügen.
Herstellen einer Verbindung mit Azure Service Bus JMS mithilfe von 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}
Anmerkung
Microsoft empfiehlt die Verwendung des sichersten Authentifizierungsflusses. Der in diesem Verfahren beschriebene Authentifizierungsflow, beispielsweise für Datenbanken, Zwischenspeicher, Nachrichten oder KI-Dienste, erfordert ein sehr hohes Maß an Vertrauen in die Anwendung und birgt Risiken, die bei anderen Flows nicht vorhanden sind. Verwenden Sie diesen Flow nur, wenn sicherere Optionen wie verwaltete Identitäten für kennwortlose oder schlüssellose Verbindungen nicht geeignet sind. Bei Vorgängen des lokalen Computers bevorzugen Sie Benutzeridentitäten für kennwortlose oder schlüssellose Verbindungen.
Verbindungen
Spring Cloud Azure bietet die folgenden drei Verbindungsfactoryoptionen für die Verbindung mit Azure Service Bus JMS:
JmsPoolConnectionFactory: Diese Factory verwaltet einen Verbindungspool mit anpassbaren Optionen wiespring.jms.servicebus.pool.max-connections. Weitere Poolkonfigurationseinstellungen – präfixiertspring.jms.servicebus.pool.– finden Sie im Abschnitt "Konfiguration" . Mit diesem Setup wird die Leistung verbessert, indem die Lastenausgleichsfunktion Azure Service Bus verwendet und Datenverkehr über mehrere Endpunkte verteilt wird.CachingConnectionFactory: Diese Factory verwendet eine einzige Verbindung für alle AufrufeJmsTemplate, wodurch der Aufwand für die Verbindungserstellung reduziert wird, was ideal für Szenarien mit geringem Datenverkehr ist. Dieser Modus verwendet jedoch nicht die Lastenausgleichsfunktion Azure Service Bus.ServiceBusJmsConnectionFactory: In diesem Modus erstellt jeder AufrufJmsTemplateeine neue Verbindung, die ressourcenintensiv und weniger effizient sein kann.
Wenn alle drei Klassen im Klassenpfad vorhanden sind, welches wird verwendet? In der folgenden Tabelle wird beschrieben, welche basierend auf Konfigurationseigenschaften verwendet wird (seit Spring Cloud Azure 7.2.0 und 6.2.0):
spring.jms.servicebus.pool.enabled |
spring.jms.cache.enabled |
Absender ConnectionFactory |
Listenercontainer ConnectionFactory |
|---|---|---|---|
| nicht festgelegt | nicht festgelegt | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| nicht festgelegt | true |
CachingConnectionFactory |
CachingConnectionFactory |
| nicht festgelegt | false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
true |
nicht festgelegt | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
true |
true |
CachingConnectionFactory |
CachingConnectionFactory |
true |
false |
JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
false |
nicht festgelegt | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
false |
true |
CachingConnectionFactory |
CachingConnectionFactory |
false |
false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
Anmerkung
Die folgende Tabelle zeigt die Standard-ConnectionFactory, wenn sowohl spring.jms.servicebus.pool.enabled als auch spring.jms.cache.enabled für unterschiedliche Spring Cloud Azure Versionen nicht festgelegt sind:
| Spring Cloud Azure Version | Absender ConnectionFactory |
Listenercontainer ConnectionFactory |
|---|---|---|
| >= 6.2.0 oder >= 7.2.0 | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| 6.1.0 und 7.0.0 | ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
| <= 6.1.0 | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
Proben
Weitere Informationen finden Sie im repository azure-spring-boot-samples zu GitHub.