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
Un abonnement Azure - En créer un gratuitement
Java Development Kit (JDK) version 8 ou supérieure.
Apache Maven, version 3.2 ou supérieure.
Une file d'attente ou une rubrique pour Azure Service Bus. Si vous n'en avez pas, consultez Utiliser le portail Azure pour créer un espace de noms Service Bus et une file d'attente ou Utiliser le portail Azure pour créer une rubrique Service Bus et des abonnements à la rubrique.
Une application Spring Boot. Si vous n’en avez pas, créez un projet Maven avec Spring Initializr. Veillez à sélectionner Projet Maven et, sous Dépendances, ajoutez la dépendance Spring Web, puis sélectionnez Java version 8 ou supérieure.
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.19.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
sur4.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.
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 Ajoutez
@EnableJms
pour activer la prise en charge des points de terminaison annotés par l'auditeur JMS. UtilisezJmsTemplate
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 ?
Lancez l’application. Vous devriez voir
Sending message
etHello 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.