Usare il bus di servizio di Azure con JMS
Questo articolo si applica a:✅ versione 4.19.0 ✅ versione 5.19.0
Questo articolo descrive come usare il bus di servizio di Azure con l'API JMS integrata nel framework Spring JMS.
Funzionalità principali
Connessione senza password
La connessione senza password usa l'autenticazione di Microsoft Entra per la connessione ai servizi di Azure senza archiviare credenziali nell'applicazione, nei relativi file di configurazione o nelle variabili di ambiente. L'autenticazione Di Microsoft Entra è un meccanismo per la connessione al bus di servizio di Azure usando le identità definite in Microsoft Entra ID. Con l'autenticazione di Microsoft Entra, è possibile gestire il bus di servizio e altri servizi Microsoft in una posizione centrale, semplificando la gestione delle autorizzazioni.
Come funziona
Spring Cloud Azure crea prima di tutto uno dei tipi di credenziali seguenti a seconda della configurazione di autenticazione dell'applicazione:
ClientSecretCredential
ClientCertificateCredential
UsernamePasswordCredential
ManagedIdentityCredential
Se nessuno di questi tipi di credenziali viene trovato, la catena di credenziali tramite DefaultTokenCredential
viene usata per ottenere le credenziali dalle proprietà dell'applicazione, dalle variabili di ambiente, dall'identità gestita o dagli IDE. Per altre informazioni, vedere 'autenticazione di Azure Spring Cloud.
Configurazione delle dipendenze
Aggiungere le dipendenze seguenti se si vuole eseguire la migrazione dell'applicazione Spring JMS per usare il bus di servizio di Azure.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>
Configurazione
Nella tabella seguente vengono descritte le proprietà configurabili quando si usa il supporto spring JMS:
Proprietà | Descrizione |
---|---|
spring.jms.servicebus.connection-string | Stringa di connessione del bus di servizio di Azure, per quando si vuole specificare direttamente la stringa di connessione. |
spring.jms.servicebus.topic-client-id | ID client JMS. Funziona solo per il bean topicJmsListenerContainerFactory . |
spring.jms.servicebusabilitato | Valore che indica se abilitare la configurazione automatica JMS del bus di servizio. Il valore predefinito è true . |
spring.jms.servicebus.idle-timeout | Durata del timeout di inattività della connessione che indica per quanto tempo il client prevede che il bus di servizio mantenga una connessione attiva quando non vengono recapitati messaggi. Il valore predefinito è 2m . |
spring.jms.servicebuscon estensione passwordless | Se abilitare senza password per JMS del bus di servizio di Azure. Il valore predefinito è false . |
spring.jms.servicebuspiano tariffario | Il piano tariffario del bus di servizio di Azure. I valori supportati sono premium e standard . Il livello Premium usa Java Message Service (JMS) 2.0, mentre il livello standard usa JMS 1.1 per interagire con il bus di servizio di Azure. |
spring.jms.servicebus.listener.reply-pub-sub-domain | Valore che indica se il tipo di destinazione di risposta è un argomento. Funziona solo per il bean topicJmsListenerContainerFactory . |
spring.jms.servicebus.listener.phase | Fase in cui deve essere avviato e arrestato questo contenitore. |
spring.jms.servicebus.listener.reply-qos-settings | Configura il QosSettings da usare per l'invio di una risposta. |
spring.jms.servicebus.listener.subscription-durable | Valore che indica se rendere durevole la sottoscrizione. Funziona solo per il bean topicJmsListenerContainerFactory . Il valore predefinito è true . |
spring.jms.servicebus.listener.subscription-shared | Valore che indica se rendere condivisa la sottoscrizione. Funziona solo per il bean topicJmsListenerContainerFactory . |
spring.jms.servicebus.pool.block-if-full | Valore che indica se bloccare quando viene richiesta una connessione e il pool è pieno. Impostarlo su false per generare invece un JMSException . |
spring.jms.servicebus.pool.block-if-full-timeout | Periodo di blocco prima di generare un'eccezione se il pool è ancora pieno. |
spring.jms.servicebus.pool.enabled | Valore che indica se deve essere creato un JmsPoolConnectionFactory anziché un normale ConnectionFactory . |
spring.jms.servicebus.pool.idle-timeout | Timeout di inattività del pool di connessioni. |
spring.jms.servicebus.pool.max-connections | Numero massimo di connessioni in pool. |
spring.jms.servicebus.pool.max-sessions-per-connection | Numero massimo di sessioni in pool per ogni connessione nel pool. |
spring.jms.servicebus.pool.time-between-expiration-check | Tempo di sospensione tra le esecuzioni del thread di rimozione della connessione inattiva. In caso negativo, non viene eseguito alcun thread di rimozione della connessione inattiva. |
spring.jms.servicebus.pool.use-anonymous-producers | Valore che indica se utilizzare una sola istanza anonima MessageProducer . Impostarlo su false per creare un MessageProducer ogni volta che ne è necessaria una. |
spring.jms.servicebus.prefetch-policy.all | Valore di fallback per l'opzione di prelettura in questo spazio dei nomi del bus di servizio. Il valore predefinito è 0 . |
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch | Numero di prelettura per l'argomento durevole. Il valore predefinito è 0 . |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch | Numero di prelettura per il browser di accodamento. Il valore predefinito è 0 . |
spring.jms.servicebus.prefetch-policy.queue-prefetch | Numero di prelettura per la coda. Il valore predefinito è 0 . |
spring.jms.servicebus.prefetch-policy.topic-prefetch | Numero di prelettura per l'argomento. Il valore predefinito è 0 . |
Nota
La configurazione generale di Spring JMS viene omessa per brevità.
Per altre informazioni, vedere documento Spring JMS.
Utilizzo di base
Connettersi a JMS del bus di servizio di Azure con passwordless
Configurare le proprietà seguenti nel file application.yml:
spring:
jms:
servicebus:
namespace: ${AZURE_SERVICEBUS_NAMESPACE}
pricing-tier: ${PRICING_TIER}
passwordless-enabled: true
Importante
JMS del bus di servizio di Azure supporta l'uso di Microsoft Entra ID per autorizzare le richieste alle risorse del bus di servizio. Con Microsoft Entra ID assicurarsi di aver assegnato il ruolo proprietario dati del bus di servizio di Azure all'account Microsoft Entra attualmente in uso. Per altre informazioni, vedere Assegnare ruoli di Azure usando il portale di Azure.
Connettersi al bus di servizio di Azure con JMS usare l'identità gestita
Per usare l'identità gestita, abilitare l'identità gestita per il servizio e assegnare il ruolo di
Azure Service Bus Data Owner
. Per altre informazioni, vedere Autenticare un'identità gestita con Microsoft Entra ID per accedere alle risorse del bus di servizio di Azure.Configurare le proprietà seguenti nel file application.yml:
spring: cloud: azure: credential: managed-identity-enabled: true jms: servicebus: namespace: ${AZURE_SERVICEBUS_NAMESPACE} pricing-tier: ${PRICING_TIER} passwordless-enabled: true
Importante
Se si usa l'identità gestita assegnata dall'utente, è necessario aggiungere anche la proprietà
spring.cloud.azure.credential.client-id
con l'ID client dell'identità gestita assegnata dall'utente.
Connettersi a JMS del bus di servizio di Azure usando la stringa di connessione
Aggiungere le proprietà seguenti ed è consigliabile procedere.
spring:
jms:
servicebus:
connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
pricing-tier: ${PRICING_TIER}
Connessioni
Spring Cloud Azure offre le tre opzioni di Connection Factory seguenti per la connessione a JMS del bus di servizio di Azure:
JmsPoolConnectionFactory
: impostarespring.jms.servicebus.pool.enabled=true
o lasciare non impostate le impostazioni del pool e della cache per usare il valore predefinito. Questa factory gestisce un pool di connessioni con opzioni personalizzabili comespring.jms.servicebus.pool.max-connections
. Le impostazioni di configurazione del pool aggiuntive, precedute da, sono descritte in dettaglio nella sezione Configurazione di . Questa configurazione migliora le prestazioni sfruttando la funzionalità di bilanciamento del carico del bus di servizio di Azure, distribuendo il traffico tra più endpoint. CachingConnectionFactory
: impostarespring.jms.cache.enabled=true
e lasciarespring.jms.servicebus.pool.enabled
unset. Questa factory riutilizza una singola connessione per tutte le chiamate aJmsTemplate
, riducendo il sovraccarico di creazione della connessione, ideale per scenari con traffico ridotto. Tuttavia, questa modalità non sfrutta la funzionalità di bilanciamento del carico del bus di servizio di Azure.ServiceBusJmsConnectionFactory
: impostarespring.jms.servicebus.pool.enabled=false
espring.jms.cache.enabled=false
per usare direttamenteServiceBusJmsConnectionFactory
, senza pool o memorizzazione nella cache. In questa modalità, ogni chiamata aJmsTemplate
crea una nuova connessione, che può essere a elevato utilizzo di risorse e meno efficiente.
Per una distribuzione ottimale delle prestazioni e del carico, è consigliabile usare JmsPoolConnectionFactory
impostando spring.jms.servicebus.pool.enabled=true
. Evitare di eseguire il wrapping di un JmsPoolConnectionFactory
con un CachingConnectionFactory
o un ServiceBusJmsConnectionFactory
perché ciò può negare i vantaggi del pool e potrebbe comportare la conservazione di connessioni inattive dopo la rimozione dal pool.
Nota
A partire da Spring Cloud Azure 5.19.0, il ConnectionFactory
predefinito è stato aggiornato per JmsPoolConnectionFactory
per usare meglio il bilanciamento del carico del server del bus di servizio. Se si preferisce continuare a usare il CachingConnectionFactory
per memorizzare nella cache sia Session
che per MessageProducer
, impostare spring.jms.cache.enabled
su true
.
Campioni
Per altre informazioni, vedere il repository azure-spring-boot-samples