Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive come usare 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 Microsoft Entra per connettersi ai servizi di Azure senza archiviare credenziali nell'applicazione, nei relativi file di configurazione o nelle variabili di ambiente. Microsoft Entra'autenticazione è un meccanismo per la connessione a bus di servizio di Azure usando le identità definite in Microsoft Entra ID. Con l'autenticazione Microsoft Entra è possibile gestire bus di servizio e altri servizi Microsoft in una posizione centrale, semplificando la gestione delle autorizzazioni.
Come funziona
Spring Cloud Azure prima compila uno dei tipi di credenziali seguenti a seconda della configurazione di autenticazione dell'applicazione:
ClientSecretCredentialClientCertificateCredentialUsernamePasswordCredentialManagedIdentityCredential
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 Spring Cloud Azure authentication.
Configurazione delle dipendenze
Aggiungere le dipendenze seguenti se si vuole eseguire la migrazione dell'applicazione Spring JMS per usare 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 |
Il bus di servizio di Azure stringa di connessione, per quando si desidera specificare direttamente il stringa di connessione. |
spring.jms.servicebus.topic-client-id |
ID client JMS. Funziona solo per il bean topicJmsListenerContainerFactory. |
spring.jms.servicebus.enabled |
Valore che indica se abilitare bus di servizio configurazione automatica JMS. Il valore predefinito è true. |
spring.jms.servicebus.idle-timeout |
Durata del timeout di inattività della connessione che indica per quanto tempo il client prevede bus di servizio mantenere attiva una connessione quando non vengono recapitati messaggi. Il valore predefinito è 2m. |
spring.jms.servicebus.passwordless-enabled |
Indica se abilitare senza password per bus di servizio di Azure JMS. Il valore predefinito è false. |
spring.jms.servicebus.pricing-tier |
Il piano tariffario 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 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 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 bus di servizio di Azure JMS usando passwordless
Configurare le proprietà seguenti nel file application.yml:
spring:
jms:
servicebus:
namespace: ${AZURE_SERVICEBUS_NAMESPACE}
pricing-tier: ${PRICING_TIER}
passwordless-enabled: true
Importante
bus di servizio di Azure JMS supporta l'uso di Microsoft Entra ID per autorizzare le richieste alle risorse di bus di servizio. Con Microsoft Entra ID, assicurarsi di aver assegnato il ruolo bus di servizio di Azure Proprietario dati all'account Microsoft Entra attualmente in uso. Per altre informazioni, vedere Assign Azure roles using the Azure portal.
Connettersi a 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
bus di servizio di Azure Data Owner. Per altre informazioni, vedere Authenticate a managed identity with Microsoft Entra ID to access bus di servizio di Azure resources.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: trueImportante
Se si usa l'identità gestita assegnata dall'utente, è necessario aggiungere anche la proprietà
spring.cloud.azure.credential.client-idcon l'ID client dell'identità gestita assegnata dall'utente.
Connettersi a bus di servizio di Azure JMS usando stringa di connessione
Aggiungere le proprietà seguenti ed è consigliabile procedere.
spring:
jms:
servicebus:
connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
pricing-tier: ${PRICING_TIER}
Nota
Microsoft consiglia di usare il flusso di autenticazione più sicuro disponibile. Il flusso di autenticazione descritto in questa procedura, ad esempio per database, cache, messaggistica o servizi di intelligenza artificiale, richiede un livello di attendibilità molto elevato nell'applicazione e comporta rischi non presenti in altri flussi. Usare questo flusso solo quando le opzioni più sicure, ad esempio le identità gestite per le connessioni senza password o senza chiave, non sono valide. Per le operazioni del computer locale, preferire le identità utente per le connessioni senza password o senza chiave.
Connessioni
Spring Cloud Azure offre le tre opzioni di connection factory seguenti per la connessione a bus di servizio di Azure JMS:
JmsPoolConnectionFactory: questa factory gestisce un pool di connessioni con opzioni personalizzabili comespring.jms.servicebus.pool.max-connections. Altre impostazioni di configurazione del pool, precedute dalspring.jms.servicebus.pool.prefisso , sono descritte in dettaglio nella sezione Configurazione . Questa configurazione migliora le prestazioni usando la funzionalità di bilanciamento del carico di bus di servizio di Azure, distribuendo il traffico tra più endpoint.CachingConnectionFactory: 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 usa la funzionalità di bilanciamento del carico di bus di servizio di Azure.ServiceBusJmsConnectionFactory: in questa modalità, ogni chiamata aJmsTemplatecrea una nuova connessione, che può essere a elevato utilizzo di risorse e meno efficiente.
Quando tutte e tre le classi esistono nel classpath, quale classe viene usata? La tabella seguente descrive che viene usata in base alle proprietà di configurazione (dal momento che Spring Cloud Azure 7.2.0 e 6.2.0):
spring.jms.servicebus.pool.enabled |
spring.jms.cache.enabled |
Mittente ConnectionFactory |
Contenitore listener ConnectionFactory |
|---|---|---|---|
| non impostato | non impostato | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| non impostato | true |
CachingConnectionFactory |
CachingConnectionFactory |
| non impostato | false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
true |
non impostato | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
true |
true |
CachingConnectionFactory |
CachingConnectionFactory |
true |
false |
JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
false |
non impostato | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
false |
true |
CachingConnectionFactory |
CachingConnectionFactory |
false |
false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
Nota
La tabella seguente mostra il valore predefinito ConnectionFactory quando sia spring.jms.servicebus.pool.enabled che spring.jms.cache.enabled non sono impostati per versioni diverse di Spring Cloud Azure:
| Versione di Spring Cloud Azure | Mittente ConnectionFactory |
Contenitore listener ConnectionFactory |
|---|---|---|
| >= 6.2.0 o >= 7.2.0 | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| 6.1.0 e 7.0.0 | ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
| <= 6.1.0 | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
Campioni
Per altre informazioni, vedere il repository azure-spring-boot-samples in GitHub.