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.
Einrichtung 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 angeben 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 Service Bus JMS-Autokonfiguration 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 |
Leerlauf-Timeout des Verbindungspools. |
spring.jms.servicebus.pool.max-connections |
Die maximale Anzahl von poolierten Verbindungen. |
spring.jms.servicebus.pool.max-sessions-per-connection |
Die maximale Anzahl gepoolter Sitzungen pro Verbindung im Pool. |
spring.jms.servicebus.pool.time-between-expiration-check |
Die Wartezeit zwischen den Ausführungen des Threads zur Entfernung inaktiver Verbindungen. Bei einem negativen Wert läuft kein Thread zum Schließen inaktiver Verbindungen. |
spring.jms.servicebus.pool.use-anonymous-producers |
Ein Wert, der angibt, ob nur eine anonyme MessageProducer Instanz verwendet werden soll. Legen Sie den Wert auf false fest, um immer dann eine MessageProducer zu erstellen, wenn eine benötigt wird. |
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 Prefetch-Nummer für das dauerhafte Thema. Der Standardwert ist 0. |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch |
Die Anzahl der Prefetch-Vorgänge für den Warteschlangen-Browser. Der Standardwert ist 0. |
spring.jms.servicebus.prefetch-policy.queue-prefetch |
Die Anzahl der Prefetch-Vorgänge für die Warteschlange. Der Standardwert ist 0. |
spring.jms.servicebus.prefetch-policy.topic-prefetch |
Die Prefetch-Nummer 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 Microsoft Entra-Konto, das Sie derzeit verwenden, die Rolle Azure Service Bus Data Owner zugewiesen haben. Weitere Informationen finden Sie unter Assign Azure Rollen mithilfe des Azure Portals.
Mit Azure Service Bus über JMS unter Verwendung einer verwalteten Identität verbinden
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 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: trueWichtig
Wenn Sie eine benutzerseitig zugewiesene verwaltete Identität verwenden, müssen Sie auch die Eigenschaft
spring.cloud.azure.credential.client-idmit der Client-ID Ihrer benutzerseitig zugewiesenen verwalteten Identität 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 nutzt für alle Aufrufe anJmsTemplatedieselbe Verbindung wieder, wodurch der Overhead bei der Verbindungserstellung reduziert wird, was ideal für Szenarien mit geringem Anfrageaufkommen 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.1.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.1.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.