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 de connexion 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
Un abonnement Azure - En créer un gratuitement
Kit de développement Java (JDK) version 8 ou ultérieure.
Apache Maven, version 3.2 ou ultérieure.
File d’attente ou rubrique pour Azure Service Bus. Si vous n’en avez pas, consultez Utiliser 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 et des abonnements Service Bus à la rubrique.
Une application Spring Boot. Si vous n’en avez pas, créez un projet Maven avec Spring Initializr. Veillez à sélectionner Maven Project et, sous Dépendances, ajoutez la dépendance Spring Web , puis sélectionnez Java version 8 ou ultérieure.
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.15.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
version4.19.0
sur . 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.
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 Ajoutez
@EnableJms
pour activer la prise en charge des points de terminaison annotés de l’écouteur JMS. PermetJmsTemplate
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 ?
Lancez l’application. Vous devez voir
Sending message
etHello 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.