Partager via


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 ConnectionFactoryré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 au compte Microsoft Entra que vous utilisez actuellement. Pour plus d’informations, consultez Attribuer des rôles Azure à l’aide du portail Azure.

Se connecter à Azure Service Bus avec JMS utiliser Managed Identity

  1. 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.

  2. 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éfinissez spring.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 que spring.jms.servicebus.pool.max-connections. Des paramètres de configuration de pool supplémentaires , préfixés par spring.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éfinissez spring.jms.cache.enabled=true et laissez spring.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éfinissez spring.jms.servicebus.pool.enabled=false et spring.jms.cache.enabled=false pour utiliser ServiceBusJmsConnectionFactory 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.