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 à partir 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 dans toute la gamme de plateformes 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 : l’authentification Microsoft Entra et l’authentification SAP (Shared Access Signatures). L’onglet Sans mot de passe affiche l’authentification Microsoft Entra et l’onglet chaîne d’Connecter ion affiche l’authentification SAP.

L’authentification Microsoft Entra est un mécanisme de connexion à Azure Service Bus JMS à l’aide d’identités définies dans l’ID Microsoft Entra. 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 SAP 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

Spring Boot version 2.5 ou ultérieure est nécessaire pour suivre les étapes décrites dans ce didacticiel.

Envoyer et recevoir des messages d’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 :

  • The Spring Cloud Azure Bill of Materials (BOM) :

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

    Remarque

    Si vous utilisez Spring Boot 2.x, veillez à définir la spring-cloud-azure-dependencies version 4.16.0sur . Cette facture de matériel (BOM) doit être configurée dans la <dependencyManagement> section de votre fichier pom.xml . Cela garantit que toutes les dépendances Azure Spring Cloud utilisent la même version. Pour plus d’informations sur la version utilisée pour ce boM, consultez La version de Spring Cloud Azure à utiliser.

  • 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 l’ID Microsoft Entra pour autoriser les demandes adressées aux ressources Service Bus. Avec l’ID Microsoft Entra, vous pouvez utiliser le contrôle d’accès en fonction du rôle Azure (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 Propriétaire des données Azure Service Bus 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 de la 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 Spécifiez s’il faut utiliser un mot de passe sans mot de passe.
    spring.jms.listener.receive-timeout Par défaut, la valeur du délai d’expiration de réception est 1 000. Nous vous recommandons de le définir sur 6 0000
  2. Ajoutez @EnableJms pour activer la prise en charge des points de terminaison annotés de l’écouteur JMS. Permet JmsTemplate d’envoyer des messages et @JmsListener de recevoir des messages, comme illustré 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’existe aucune opération d’authentification dans les configurations ou le code. Toutefois, 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 d’identités Azure 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 l’authentification Azure dans les environnements de développement Java. Pour terminer l’authentification dans les environnements d’hébergement Azure, nous vous recommandons d’utiliser l’identité managée affectée par l’utilisateur. Pour plus d’informations, consultez Que sont les identités managées pour les ressources Azure ?

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

    Sending message
    Message received: Hello World
    

Déployer sur Azure Spring Apps

Maintenant que vous disposez de l’application Spring Boot en cours d’exécution localement, il est temps de le déplacer en production. Azure Spring Apps facilite le déploiement d’applications Spring Boot sur Azure sans aucune modification de 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, consultez Déployer votre première application sur Azure Spring Apps.

Étapes suivantes