Utiliser JMS dans Spring pour accéder à Azure Service Bus

Ce tutoriel montre comment utiliser Spring Boot Starter pour Azure Service Bus JMS pour envoyer et recevoir des messages de Service Bus queues et topics.

Azure fournit une plateforme de messagerie asynchrone appelée Azure Service Bus (« Service Bus ») basée sur la norme Advanced Message Queueing Protocol 1.0 (« AMQP 1.0 »). Vous pouvez utiliser Service Bus sur la plage de plateformes de Azure prises en charge.

Spring Boot Starter pour Azure Service Bus JMS fournit l’intégration de Spring JMS à Service Bus.

La vidéo suivante explique comment intégrer des applications Spring JMS à Azure Service Bus à l’aide de JMS 2.0.


Dans ce tutoriel, nous incluons deux méthodes d’authentification : authentification Microsoft Entra et Authentification SAP (Shared Access Signatures). L’onglet Passwordless affiche l’authentification Microsoft Entra et la chaîne Connection affiche l’authentification SAP.

L'authentification Microsoft Entra est un mécanisme de connexion à Azure Service Bus JMS utilisant des identités définies dans Microsoft Entra ID. Avec l’authentification Microsoft Entra, vous pouvez gérer les identités utilisateur de base de données et d’autres services Microsoft dans un emplacement central, ce qui simplifie la gestion des autorisations.

L'authentification SAS utilise la chaîne de connexion de votre espace de noms Azure Service Bus pour l'accès délégué à Service Bus JMS. Si vous choisissez d’utiliser des signatures d’accès partagé comme informations d’identification, vous devez gérer les chaîne de connexion par vous-même.

Prérequis

Important

La version 2.5 ou supérieure de Spring Boot est nécessaire pour réaliser les étapes de ce tutoriel.

Envoyer et recevoir des messages de Azure Service Bus

Avec une file d’attente ou une rubrique pour Azure Service Bus, vous pouvez envoyer et recevoir des messages à l’aide de Spring Cloud Azure Service Bus JMS.

Pour installer le module Spring Cloud Azure Service Bus JMS Starter, ajoutez les dépendances suivantes à votre fichier pom.xml :

  • Le Spring Cloud Azure Liste des Matériaux (BOM) :

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.2.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Remarque

    Si vous utilisez Spring Boot 4.0.x, veillez à mettre la spring-cloud-azure-dependencies version à 7.2.0.

    Si vous utilisez Spring Boot 3.5.x, assurez-vous de définir la version spring-cloud-azure-dependencies à 6.2.0.

    Si vous utilisez Spring Boot 3.1.x-3.5.x, veillez à définir la version spring-cloud-azure-dependencies5.25.0.

    Si vous utilisez Spring Boot 2.x, assurez-vous de définir la version spring-cloud-azure-dependencies sur 4.20.0.

    Cette liste de matériel (BOM) doit être configurée dans la section <dependencyManagement> de votre fichier pom.xml. Cela garantit que toutes les dépendances spring Cloud Azure utilisent la même version.

    Pour plus d’informations sur la version utilisée pour ce boM, consultez Which Version of Spring Cloud Azure Should I Use.

  • L’artefact Spring Cloud Azure Service Bus JMS Starter :

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
    </dependency>
    

Coder l’application

Procédez comme suit pour configurer votre application afin d’utiliser une file d’attente ou une rubrique Service Bus pour envoyer et recevoir des messages.

  1. Configurez les informations d’identification Service Bus en ajoutant les propriétés suivantes à votre fichier application.properties.

    Remarque

    Azure Service Bus JMS prend en charge l’utilisation de Microsoft Entra ID pour autoriser les demandes aux ressources de Service Bus. Avec Microsoft Entra ID, vous pouvez utiliser Azure contrôle d’accès en fonction du rôle (Azure RBAC) pour accorder des autorisations à un principal de sécurité, qui peut être un utilisateur ou un principal de service d’application.

    Important

    Avant de commencer, vérifiez que vous avez affecté le rôle Azure Service Bus Propriétaire des données au compte Microsoft Entra que vous utilisez actuellement. Pour plus d’informations, consultez Assigner des rôles Azure à l’aide du portail Azure.

    spring.jms.servicebus.namespace=<ServiceBusNamespace>
    spring.jms.servicebus.pricing-tier=<ServiceBusPricingTier>
    spring.jms.servicebus.passwordless-enabled=true
    spring.jms.listener.receive-timeout=60000
    

    Le tableau suivant décrit les champs de la configuration :

    Champ Descriptif
    spring.jms.servicebus.namespace Spécifiez l’espace de noms que vous avez obtenu dans votre instance de service Service Bus à partir du portail Azure.
    spring.jms.servicebus.pricing-tier Spécifiez le niveau tarifaire de votre 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.passwordless-enabled Indiquez si vous souhaitez utiliser l'option sans mot de passe.
    spring.jms.listener.receive-timeout Par défaut, le délai de réception est de 1000. Nous vous recommandons de la fixer à 60000
  2. Ajoutez @EnableJms pour activer la prise en charge des points de terminaison annotés par l'auditeur JMS. Utilisez JmsTemplate pour envoyer des messages et @JmsListener pour en recevoir, comme indiqué dans l'exemple suivant :

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.jms.annotation.EnableJms;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.jms.core.JmsTemplate;
    
    @SpringBootApplication
    @EnableJms
    public class ServiceBusJMSQueueApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(ServiceBusJMSQueueApplication.class);
        private static final String QUEUE_NAME = "<QueueName>";
    
        @Autowired
        private JmsTemplate jmsTemplate;
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceBusJMSQueueApplication.class, args);
        }
    
        @Override
        public void run(String... args) {
            LOGGER.info("Sending message");
            jmsTemplate.convertAndSend(QUEUE_NAME, "Hello World");
        }
    
        @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory")
        public void receiveMessage(String message) {
            LOGGER.info("Message received: {}", message);
        }
    
    }
    

    Remplacez <QueueName> par votre propre nom de file d’attente configuré dans votre espace de noms Service Bus.

    Conseil

    Dans ce tutoriel, il n'y a pas d'opérations d'authentification dans les configurations ou le code. Toutefois, la connexion à Azure services nécessite une authentification. Pour terminer l’authentification, vous devez utiliser Azure Identity. Spring Cloud Azure utilise DefaultAzureCredential, que la bibliothèque Azure Identity fournit pour vous aider à obtenir des informations d’identification sans aucune modification du code.

    DefaultAzureCredential prend en charge plusieurs méthodes d’authentification et détermine quelle méthode doit être utilisée au moment de l’exécution. Cette approche permet à votre application d'utiliser différentes méthodes d'authentification dans différents environnements (tels que les environnements locaux et de production) sans implémenter de code spécifique à l'environnement. Pour plus d’informations, consultez DefaultAzureCredential.

    Pour terminer l’authentification dans les environnements de développement locaux, vous pouvez utiliser Azure CLI, Visual Studio Code, PowerShell ou d’autres méthodes. Pour plus d’informations, consultez Authentification Azure dans les environnements de développement Java. Pour terminer l’authentification dans Azure environnements d’hébergement, nous vous recommandons d’utiliser l’identité managée affectée par l’utilisateur. Pour plus d’informations, consultez Qu’est-ce que les identités managées pour les ressources Azure ?

  3. Lancez l’application. Vous devez voir Sending message et Hello World enregistrés dans le fichier journal de votre application, comme illustré dans l’exemple de sortie suivant :

    Sending message
    Message received: Hello World
    

Déployer sur Azure Spring Apps

Maintenant que l'application Spring Boot fonctionne localement, il est temps de la mettre en production. Azure Spring Apps facilite le déploiement d’applications Spring Boot sur Azure sans aucune modification du code. Le service gère l’infrastructure des applications Spring, ce qui permet aux développeurs de se concentrer sur leur code. Azure Spring Apps fournit une gestion du cycle de vie à l’aide de la supervision et des diagnostics complets, de la gestion de la configuration, de la découverte de services, de l’intégration CI/CD, des déploiements bleu-vert, etc. Pour déployer votre application sur Azure Spring Apps, consultez Deploy your first application to Azure Spring Apps.

Étapes suivantes