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

Ce tutoriel montre comment utiliser Spring Boot Starter pour Azure Service Bus JMS afin d'envoyer des messages vers et de 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 Queuing Protocol 1.0 (« AMQP 1.0 »). Vous pouvez utiliser Service Bus sur l'ensemble des plateformes Azure prises en charge.

Spring Boot Starter for Azure Service Bus JMS permet d'intégrer Spring JMS à Service Bus.

La vidéo suivante décrit 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 : L'authentification Microsoft Entra et l'authentification Shared Access Signatures (SAS). L'onglet Sans mot de passe présente l'authentification Microsoft Entra et l'onglet Chaîne de connexion présente l'authentification SAS.

L'authentification Microsoft Entra est un mécanisme permettant de se connecter à Azure Service Bus JMS à l'aide d'identités définies dans Microsoft Entra ID. Avec l’authentification Microsoft Entra, vous pouvez gérer les identités des utilisateurs de base de données et d’autres services Microsoft dans un emplacement centralisé, 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ées comme informations d'identification, vous devez gérer vous-même la chaîne de connexion.

Prérequis

Important

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

Envoyez et recevez des messages depuis 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 :

  • La nomenclature Spring Cloud Azure :

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

    Remarque

    Si vous utilisez Spring Boot 2.x, assurez-vous de définir la version spring-cloud-azure-dependencies sur 4.19.0. Cette nomenclature doit être configurée dans la section <dependencyManagement> de votre fichier pom.xml. Cela permet de s'assurer que toutes les dépendances de Spring Cloud Azure utilisent la même version. Pour plus d'informations sur la version utilisée pour cette nomenclature, consultez Quelle version de Spring Cloud Azure dois-je utiliser.

  • 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

Suivez les étapes suivantes pour configurer votre application afin qu'elle utilise 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 requêtes vers les ressources du bus de service. Avec Microsoft Entra ID, vous pouvez utiliser le contrôle d'accès basé sur les rôles d'Azure (Azure RBAC) pour accorder des permissions à un principal de sécurité, qui peut être un utilisateur ou un principal de service d'application.

    Important

    Avant de commencer, assurez-vous que vous avez attribué le rôle Azure Service Bus Data Owner au compte Microsoft Entra que vous utilisez actuellement. Pour plus d’informations, consultez Attribuer des rôles Azure en utilisant le 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 Description
    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 le nom de file d’attente que vous avez 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. Cependant, la connexion aux services Azure nécessite une authentification. Pour effectuer l’authentification, vous devez utiliser Identité Azure. Spring Cloud Azure utilise DefaultAzureCredential, que la bibliothèque Azure Identity fournit pour vous aider à obtenir des informations d'identification sans modifier le 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 réaliser 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 la section Authentification Azure dans les environnements de développement Java. Pour compléter l'authentification dans les environnements d'hébergement Azure, nous vous recommandons d'utiliser l'identité gérée attribuée à l'utilisateur. Pour plus d’informations, consultez Que sont les identités managées pour les ressources Azure ?

  3. Lancez l’application. Vous devriez voir Sending message et Hello World affichés dans votre journal d'application, comme le montre 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 des 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 assure la gestion du cycle de vie en utilisant des outils complets, tels que la supervision et les diagnostics, la gestion des configurations, la découverte de services, l’intégration CI/CD, les déploiements bleus-verts, etc. Pour déployer votre application sur Azure Spring Apps, voir Déployer votre première application sur Azure Spring Apps.

Étapes suivantes