Utiliser Azure Service Bus avec JMS
Cet article s’applique à :✅ version 4.19.0 ✅ version 5.20.1
Cet article explique comment utiliser Azure Service Bus avec l’API JMS intégrée à l’infrastructure Spring JMS.
Fonctionnalités principales
Connexion sans mot de passe
La connexion sans mot de passe utilise l’authentification Microsoft Entra pour la connexion aux services Azure sans stocker d’informations d’identification dans l’application, ses fichiers de configuration ou dans des variables d’environnement. L’authentification Microsoft Entra est un mécanisme de connexion à Azure Service Bus à l’aide d’identités définies dans l’ID Microsoft Entra. Avec l’authentification Microsoft Entra, vous pouvez gérer Service Bus et d’autres services Microsoft dans un emplacement central, ce qui simplifie la gestion des autorisations.
Fonctionnement
Spring Cloud Azure crée d’abord l’un des types d’informations d’identification suivants en fonction de la configuration de l’authentification de l’application :
ClientSecretCredential
ClientCertificateCredential
UsernamePasswordCredential
ManagedIdentityCredential
Si aucun de ces types d’informations d’identification n’est trouvé, la chaîne d’informations d’identification via DefaultTokenCredential
est utilisée pour obtenir des informations d’identification à partir des propriétés de l’application, des variables d’environnement, une identité managée ou des IDE. Pour plus d’informations, consultez l’authentification Spring Cloud Azure.
Configuration des dépendances
Ajoutez les dépendances suivantes si vous souhaitez migrer votre application Spring JMS pour utiliser Azure Service Bus.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>
Configuration
Le tableau suivant décrit les propriétés configurables lors de l’utilisation de la prise en charge de Spring JMS :
Propriété | Description |
---|---|
spring.jms.servicebus.connection-string | Chaîne de connexion Azure Service Bus pour laquelle vous souhaitez fournir directement la chaîne de connexion. |
spring.jms.servicebus.topic-client-id | ID client JMS. Ne fonctionne que pour le haricot topicJmsListenerContainerFactory . |
spring.jms.servicebus.enabled | Valeur qui indique s’il faut activer la configuration automatique JMS Service Bus. La valeur par défaut est true . |
spring.jms.servicebus.idle-timeout | Durée du délai d’inactivité de la connexion qui indique la durée pendant laquelle le client s’attend à ce que Service Bus conserve une connexion active lorsqu’aucun message n’est remis. La valeur par défaut est 2m . |
spring.jms.servicebus.passwordless-enabled | Indique s’il faut activer sans mot de passe pour Azure Service Bus JMS. La valeur par défaut est false . |
spring.jms.servicebusniveau .pricing | Niveau tarifaire d’Azure Service Bus. Les valeurs prises en charge sont premium et standard . Le niveau Premium utilise Java Message Service (JMS) 2.0, tandis que le niveau standard utilise JMS 1.1 pour interagir avec Azure Service Bus. |
spring.jms.servicebus.listener.reply-pub-sub-domain | Valeur qui indique si le type de destination de réponse est une rubrique. Ne fonctionne que pour le haricot topicJmsListenerContainerFactory . |
spring.jms.servicebus.listener.phase | Phase dans laquelle ce conteneur doit être démarré et arrêté. |
spring.jms.servicebus.listener.reply-qos-settings | Configure le QosSettings à utiliser lors de l’envoi d’une réponse. |
spring.jms.servicebus.listener.subscription-durable | Valeur qui indique s’il faut rendre l’abonnement durable. Ne fonctionne que pour le haricot topicJmsListenerContainerFactory . La valeur par défaut est true . |
spring.jms.servicebus.listener.subscription-shared | Valeur qui indique s’il faut partager l’abonnement. Ne fonctionne que pour le haricot topicJmsListenerContainerFactory . |
spring.jms.servicebus.pool.block-if-full | Valeur qui indique s’il faut bloquer lorsqu’une connexion est demandée et que le pool est plein. Définissez-le sur false pour lever une JMSException à la place. |
spring.jms.servicebus.pool.block-if-full-timeout | Période de blocage avant de lever une exception si le pool est toujours plein. |
spring.jms.servicebus.pool.enabled | Valeur qui indique si une JmsPoolConnectionFactory doit être créée, au lieu d’une ConnectionFactory régulière. |
spring.jms.servicebus.pool.idle-timeout | Délai d’inactivité du pool de connexions. |
spring.jms.servicebus.pool.max-connections | Nombre maximal de connexions mises en pool. |
spring.jms.servicebus.pool.max-sessions par connexion | Nombre maximal de sessions mises en pool par connexion dans le pool. |
spring.jms.servicebus.pool.time-between-expiration-check | Délai d’attente entre les exécutions du thread d’éviction de connexion inactive. Lorsqu’il est négatif, aucun thread d’éviction de connexion inactif n’est exécuté. |
spring.jms.servicebus.pool.use-anonymous-producers | Valeur qui indique s’il faut utiliser une seule instance anonyme MessageProducer . Définissez-la sur false pour créer une MessageProducer chaque fois qu’une seule est requise. |
spring.jms.servicebus.prefetch-policy.all | Valeur de secours de l’option de prérécupération dans cet espace de noms Service Bus. La valeur par défaut est 0 . |
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch | Nombre de prérécupérations pour la rubrique durable. La valeur par défaut est 0 . |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch | Nombre de prérécupérations pour le navigateur de file d’attente. La valeur par défaut est 0 . |
spring.jms.servicebus.prefetch-policy.queue-prefetch | Nombre de prérécupérations pour la file d’attente. La valeur par défaut est 0 . |
spring.jms.servicebus.prefetch-policy.topic-prefetch | Nombre de prérécupérations pour la rubrique. La valeur par défaut est 0 . |
Note
La configuration générale spring JMS est omise pour un court terme.
Pour plus d’informations, consultez document Spring JMS.
Utilisation de base
Se connecter à Azure Service Bus JMS à l’aide d’un mot de passe sans mot de passe
Configurez les propriétés suivantes dans votre fichier application.yml :
spring:
jms:
servicebus:
namespace: ${AZURE_SERVICEBUS_NAMESPACE}
pricing-tier: ${PRICING_TIER}
passwordless-enabled: true
Important
Azure Service Bus JMS prend en charge l’utilisation de l’ID Microsoft Entra pour autoriser les demandes adressées aux ressources Service Bus. Avec l’ID Microsoft Entra, vérifiez que vous avez affecté le rôle propriétaire de données Azure Service Bus
Se connecter à Azure Service Bus avec JMS utiliser Managed Identity
Pour utiliser l’identité managée, activez l’identité managée pour votre service et attribuez le rôle
Azure Service Bus Data Owner
. Pour plus d’informations, consultez Authentifier une identité managée avec Microsoft Entra ID pour accéder aux ressources Azure Service Bus.Configurez les propriétés suivantes dans votre fichier application.yml :
spring: cloud: azure: credential: managed-identity-enabled: true jms: servicebus: namespace: ${AZURE_SERVICEBUS_NAMESPACE} pricing-tier: ${PRICING_TIER} passwordless-enabled: true
Important
Si vous utilisez l’identité managée affectée par l’utilisateur, vous devez également ajouter la propriété
spring.cloud.azure.credential.client-id
avec votre ID client d’identité managée affectée par l’utilisateur.
Se connecter à Azure Service Bus JMS à l’aide de la chaîne de connexion
Ajoutez les propriétés suivantes et vous pouvez y accéder.
spring:
jms:
servicebus:
connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
pricing-tier: ${PRICING_TIER}
Note
Microsoft recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Le flux d'authentification décrit dans cette procédure, comme pour les bases de données, les caches, la messagerie ou les services IA, demande un degré de confiance très élevé dans l'application et comporte des risques non présents dans d'autres flux. Utilisez ce flux uniquement lorsque des options plus sécurisées, telles que les identités managées pour les connexions sans mot de passe ou sans clé, ne sont pas viables. Pour les opérations d’ordinateur local, préférez les identités utilisateur pour les connexions sans mot de passe ou sans clé.
Connexions
Spring Cloud Azure fournit les trois options d’usine de connexion suivantes pour la connexion à Azure Service Bus JMS :
JmsPoolConnectionFactory
: définissezspring.jms.servicebus.pool.enabled=true
ou laissez les paramètres de pool et de cache non définis pour utiliser la valeur par défaut. Cette fabrique gère un pool de connexions avec des options personnalisables telles quespring.jms.servicebus.pool.max-connections
. Des paramètres de configuration de pool supplémentaires , préfixés parspring.jms.servicebus.pool.
, sont détaillés dans la section Configuration. Cette configuration améliore les performances en tirant parti de la fonctionnalité d’équilibrage de charge d’Azure Service Bus, en distribuant le trafic sur plusieurs points de terminaison.CachingConnectionFactory
: définissezspring.jms.cache.enabled=true
et laissezspring.jms.servicebus.pool.enabled
non défini. Cette fabrique réutilise une seule connexion pour tous les appels àJmsTemplate
, ce qui réduit la surcharge de création de connexion, qui est idéale pour les scénarios à faible trafic. Toutefois, ce mode ne tire pas parti de la fonctionnalité d’équilibrage de charge d’Azure Service Bus.ServiceBusJmsConnectionFactory
: définissezspring.jms.servicebus.pool.enabled=false
etspring.jms.cache.enabled=false
pour utiliserServiceBusJmsConnectionFactory
directement, sans regroupement ni mise en cache. Dans ce mode, chaque appel àJmsTemplate
crée une connexion, qui peut être gourmande en ressources et moins efficace.
Pour optimiser les performances et la distribution de charge, nous vous recommandons d’utiliser JmsPoolConnectionFactory
en définissant spring.jms.servicebus.pool.enabled=true
. Évitez d’encapsuler un JmsPoolConnectionFactory
avec un CachingConnectionFactory
ou un ServiceBusJmsConnectionFactory
, car cela peut négation des avantages de regroupement et peut entraîner la conservation des connexions inactives après leur suppression du pool.
Note
À compter de Spring Cloud Azure 5.20.1, la ConnectionFactory
par défaut a été mise à jour pour JmsPoolConnectionFactory
pour mieux utiliser l’équilibrage de charge du serveur Service Bus. Si vous préférez continuer à utiliser la CachingConnectionFactory
pour la mise en cache à la fois Session
et MessageProducer
, définissez spring.jms.cache.enabled
sur true
.
Échantillons
Pour plus d’informations, consultez le dépôt azure-spring-boot-samples sur GitHub.