Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article montre comment utiliser stockage Azure File d’attente dans Java applications créées avec Spring Framework.
Azure Queue Storage met en œuvre des files d’attente dans le cloud pour permettre la communication entre composants d’une application distribuée. Chaque file d’attente gère une liste de messages qui peuvent être ajoutés par un composant expéditeur et traités par un composant récepteur. Avec une file d'attente, votre application peut s'adapter immédiatement pour répondre à la demande.
Spring Cloud Azure fournit différents modules permettant d’utiliser des frameworks Spring pour envoyer des messages et recevoir des messages provenant de files d’attente stockage Azure. Vous pouvez utiliser ces modules indépendamment ou les combiner pour différents cas d'utilisation, comme décrit dans la liste suivante :
Spring Cloud stockage Azure Queue Starter vous permet d’envoyer et de recevoir des messages en utilisant la bibliothèque client Java SDK pour les files d'attente de stockage, avec les fonctionnalités de Spring Boot.
Spring Messaging stockage Azure Queue vous permet d’interagir avec les files d’attente de stockage via l’API Spring Messaging.
Spring Integration stockage Azure Queue vous permet de connecter Spring Integration Message Channels avec des files d’attente de stockage.
Prérequis
Un abonnement Azure - créez-en un gratuitement.
Java Kit de développement (JDK), version 8 ou ultérieure.
Un compte stockage Azure et des files d’attente Azure. Si vous ne disposez pas de ces ressources, créez d'abord un compte de stockage, puis une file d'attente. Pour plus d’informations, consultez Créer un compte de stockage et la Creater une file d’attente de Quickstart : Créer une file d’attente et ajouter un message avec le portail Azure.
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 Dependencies, ajoutez la dépendance Spring Web, puis sélectionnez Java version 8 ou ultérieure.
Remarque
Pour accorder à votre compte l'accès aux ressources, dans votre compte stockage Azure nouvellement créé, attribuez le rôle Storage Queue Data Contributor au compte Microsoft Entra que vous utilisez actuellement. Pour plus d’informations, consultez Assigner des rôles Azure à l’aide du portail Azure.
Importante
La version 2.5 ou supérieure de Spring Boot est nécessaire pour réaliser les étapes de ce tutoriel.
Préparer votre environnement local
Dans ce tutoriel, les configurations et le code ne comportent aucune opération d'authentification. Toutefois, la connexion à un service Azure nécessite une authentification. Pour terminer l’authentification, vous devez utiliser la bibliothèque de client 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 ou de production - sans implémenter de code spécifique à l'environnement. Pour plus d’informations, consultez la section DefaultAzureCredential d’Authentifier les applications Java hébergées sur Azure.
Pour utiliser Azure CLI, IntelliJ ou d'autres méthodes pour terminer l’authentification dans les environnements de développement locaux, consultez l’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. Pour plus d’informations, consultez Qu’est-ce que les identités managées pour les ressources Azure ?
Utiliser Spring Cloud stockage Azure Queue Starter
Le module Spring Cloud stockage Azure Queue Starter importe bibliothèque de client stockage Azure Queue pour Java avec le framework Spring Boot. Vous pouvez utiliser Spring Cloud Azure et le Kit de développement logiciel (SDK) Azure ensemble, dans un modèle non mutuellement exclusif. Par conséquent, vous pouvez continuer à utiliser l’API cliente file d’attente de stockage Java dans votre application Spring.
Ajout de dépendances
Pour installer le module Spring Cloud stockage Azure Queue Starter, ajoutez les dépendances suivantes à votre fichier pom.xml :
Le Spring Cloud Azure Bill of Materials (BOM) :
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.3.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-dependenciesversion à7.3.0.Si vous utilisez Spring Boot 3.5.x, assurez-vous de définir la version
spring-cloud-azure-dependenciesà6.4.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-dependenciessur4.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.
Artefact de file d’attente Stockage File d'attente Azure Spring Cloud :
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-storage-queue</artifactId> </dependency>
Codez votre application pour envoyer et recevoir des messages
Cette section vous montre comment utiliser les clients Stockage File d'attente Azure dans le contexte d’une application Spring. Vous avez les deux options suivantes :
- Utilisez l'autoconfiguration de Spring Boot et les clients préconfigurés du contexte Spring (recommandé).
- Construire le client par programme.
Avec l'autoconfiguration, vous câblez automatiquement les beans clients à partir du conteneur d'inversion de contrôle (IoC) de Spring. Cette approche vous offre une expérience plus flexible et plus efficace lorsque vous développez avec des clients Storage Queue. L'autoconfiguration présente les avantages suivants :
L'autoconfiguration utilise une configuration externalisée afin que vous puissiez travailler avec le même code d'application dans différents environnements.
Vous pouvez déléguer au cadre Spring Boot le processus d'apprentissage du modèle de construction et l'enregistrement des clients dans le contexte de l'application. Vous vous concentrez uniquement sur la manière d'utiliser les clients avec vos propres exigences commerciales.
Vous pouvez utiliser l'indicateur d'intégrité pour inspecter l'état et l'intégrité de votre application et de vos composants internes.
Les exemples de code des sections suivantes vous montrent comment utiliser QueueClient avec les deux alternatives décrites.
Conseil
Azure Java SDK pour la file d’attente de stockage fournit plusieurs clients pour interagir avec la file d’attente de stockage. Le starter fournit également une autoconfiguration pour tous les clients Storage Queue et les constructeurs de clients. Cet article n'utilise que QueueClient comme exemple.
Utiliser l'autoconfiguration de Spring Boot
Pour envoyer et recevoir des messages à partir de stockage Azure files d’attente, procédez comme suit pour configurer l’application :
Configurez le nom de votre compte de stockage et le nom de votre file d'attente, comme indiqué dans l'exemple suivant :
spring.cloud.azure.storage.queue.account-name=<your-storage-account-name> spring.cloud.azure.storage.queue.queue-name=<your-storage-queue-name>Injectez le
QueueClientdans votre application Spring et appelez les API correspondantes pour envoyer des messages, comme le montre l'exemple suivant :import com.azure.storage.queue.QueueClient; import com.azure.storage.queue.models.QueueMessageItem; import com.azure.storage.queue.models.SendMessageResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class StorageQueueClientApplication implements CommandLineRunner { private final static Logger logger = LoggerFactory.getLogger(StorageQueueClientApplication.class); @Autowired private QueueClient queueClient; public static void main(String[] args) { SpringApplication.run(StorageQueueClientApplication.class, args); } @Override public void run(String... args) { // Using the QueueClient object, call the create method to create the queue in your storage account. queueClient.create(); SendMessageResult sendMessageResult = queueClient.sendMessage("Hello world"); logger.info("Send message id: {}", sendMessageResult.getMessageId()); QueueMessageItem queueMessageItem = queueClient.receiveMessage(); logger.info("Received message: {}", new String(queueMessageItem.getBody().toBytes())); } }Lancez l’application. Après le lancement, l'application produit des logs similaires à l'exemple suivant :
Send message id: ... Received message: Hello world
Construire le client par programme
Vous pouvez créer les beans de client vous-même, mais le processus est compliqué. Dans les applications Spring Boot, vous devez gérer les propriétés, apprendre le modèle de constructeur et enregistrer les clients dans votre contexte d'application Spring. Les étapes suivantes vous montrent comment procéder.
Construisez le client par programme dans votre application Spring, comme le montre l'exemple suivant. Veillez à remplacer l'espace réservé
<storage-account-name>par votre propre valeur.import com.azure.identity.DefaultAzureCredentialBuilder; import com.azure.storage.queue.QueueClient; import com.azure.storage.queue.QueueClientBuilder; import com.azure.storage.queue.models.QueueMessageItem; import com.azure.storage.queue.models.SendMessageResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class StorageQueueClientApplication implements CommandLineRunner { private final static String queueName = "test-queue"; private final static String endpoint = "https://<storage-account-name>.queue.core.windows.net/"; private final static Logger logger = LoggerFactory.getLogger(StorageQueueClientApplication.class); QueueClient queueClient = new QueueClientBuilder() .endpoint(endpoint) .queueName(queueName) .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); public static void main(String[] args) { SpringApplication.run(StorageQueueClientApplication.class, args); } @Override public void run(String... args) { // Using the QueueClient object, call the create method to create the queue in your storage account. queueClient.create(); SendMessageResult sendMessageResult = queueClient.sendMessage("Hello world"); logger.info("Send message id: {}", sendMessageResult.getMessageId()); QueueMessageItem queueMessageItem = queueClient.receiveMessage(); logger.info("Received message: {}", new String(queueMessageItem.getBody().toBytes())); } }Lancez l’application. Après le lancement, l'application produit des logs similaires à l'exemple suivant :
Send message id: ... Received message: Hello world
La liste suivante montre les raisons pour lesquelles ce code n'est pas flexible ou gracieux :
- Les noms des comptes de stockage et des files d'attente sont codés en dur.
- Si vous utilisez
@Valuepour obtenir des configurations à partir de l’environnement Spring, vous ne pouvez pas avoir d’indicateurs IDE dans votre fichier application.properties . - Si vous avez un scénario de microservice, vous devez dupliquer le code dans chaque projet, et il est facile de faire des erreurs et difficile d'être cohérent.
Heureusement, créer les beans clients par soi-même n'est pas nécessaire avec Spring Cloud Azure. Au lieu de cela, vous pouvez les injecter directement et utiliser les propriétés de configuration que vous connaissez déjà pour configurer la file d'attente de stockage. Pour plus d’informations, consultez les propriétés de configuration Spring Cloud Azure.
Spring Cloud Azure fournit également les configurations globales suivantes pour différents scénarios. Pour plus d’informations, consultez Spring Cloud Azure propriétés de configuration globales.
- Options de proxy.
- Options de réessai.
Vous pouvez également vous connecter à différents clouds Azure. Pour plus d’informations, consultez Connect to different Azure clouds.
Utiliser stockage Azure Queue de Spring Messaging
Le module Spring Messaging stockage Azure Queue prend en charge l’infrastructure Spring Messaging avec Stockage File d'attente Azure.
Si vous utilisez Spring Messaging Azure Queue Storage, vous pouvez utiliser la fonctionnalité StorageQueueTemplate pour envoyer des messages aux files d'attente de façon asynchrone et synchrone.
Les sections suivantes vous montrent comment utiliser Spring Messaging avec stockage Azure Queue pour envoyer des messages vers et recevoir des messages depuis des files d'attente de stockage.
Ajout de dépendances
Pour installer le module Spring Messaging stockage Azure Queue, ajoutez les dépendances suivantes à votre fichier pom.xml :
Le Spring Cloud Azure Bill of Materials (BOM) :
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.3.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-dependenciesversion à7.3.0.Si vous utilisez Spring Boot 3.5.x, assurez-vous de définir la version
spring-cloud-azure-dependenciesà6.4.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-dependenciessur4.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.
Les composants Spring Cloud Azure Starter et les files d'attente de stockage Spring Messaging :
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-messaging-azure-storage-queue</artifactId> </dependency>
Codez votre application pour envoyer et recevoir des messages
Suivez les étapes suivantes pour configurer et coder votre application :
Configurez le nom du compte stockage Azure pour vos files d’attente de stockage, comme illustré dans l’exemple suivant :
spring.cloud.azure.storage.queue.account-name=<your-storage-account-name>Connectez un émetteur et un récepteur pour envoyer et recevoir des messages avec Spring, comme indiqué dans l'exemple suivant. Veillez à remplacer l'espace réservé
<storage-queue-name>par votre propre valeur.import com.azure.spring.messaging.AzureHeaders; import com.azure.spring.messaging.checkpoint.Checkpointer; import com.azure.spring.messaging.storage.queue.core.StorageQueueTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; import java.time.Duration; @SpringBootApplication public class StorageQueueMessagingApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(StorageQueueMessagingApplication.class); private static final String STORAGE_QUEUE_NAME = "<storage-queue-name>"; @Autowired StorageQueueTemplate storageQueueTemplate; public static void main(String[] args) { SpringApplication.run(StorageQueueMessagingApplication.class, args); } @Override public void run(String... args) { storageQueueTemplate .sendAsync(STORAGE_QUEUE_NAME, MessageBuilder.withPayload("Hello world").build()) .subscribe(); LOGGER.info("Message was sent successfully."); Message<?> message = storageQueueTemplate.receiveAsync(STORAGE_QUEUE_NAME, Duration.ofSeconds(30)).block(); LOGGER.info("Received message: {}", new String((byte[]) message.getPayload())); } }Lancez l’application. Après le lancement, l'application produit des logs similaires à l'exemple suivant :
Message was sent successfully. ... Received message: Hello World
Utiliser Spring Integration avec la file d'attente stockage Azure
Le module Spring Integration stockage Azure Queue prend en charge l’infrastructure Spring Integration avec des files d’attente de stockage.
Si votre application Spring utilise des canaux de messages Spring Integration, vous pouvez acheminer les messages entre vos canaux de messages et la file d'attente de stockage à l'aide d'adaptateurs de canaux. Un adaptateur de canal entrant redirecte les messages d'une file d'attente de stockage vers une chaîne de messages. Un adaptateur de canal sortant transmet les messages d'un canal de messages vers une file d'attente de stockage.
Les sections suivantes vous montrent comment utiliser Spring Integration stockage Azure Queue pour envoyer des messages sur et les recevoir des files d’attente de stockage.
Ajout de dépendances
Pour installer le module Spring Integration stockage Azure Queue, ajoutez les dépendances suivantes à votre fichier pom.xml :
Le Spring Cloud Azure Bill of Materials (BOM) :
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.3.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-dependenciesversion à7.3.0.Si vous utilisez Spring Boot 3.5.x, assurez-vous de définir la version
spring-cloud-azure-dependenciesà6.4.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-dependenciessur4.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.
Les artefacts de la file d'attente stockage Azure de Spring Integration :
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-integration-storage-queue</artifactId> </dependency>
Codez votre application pour envoyer et recevoir des messages
Suivez les étapes suivantes pour configurer et coder votre application :
Configurez le nom du compte stockage Azure pour vos files d’attente de stockage.
spring.cloud.azure.storage.queue.account-name=<your-storage-account-name>Créez une classe
QueueReceiveConfigurationJava, comme illustré dans l’exemple suivant. Cette classe est utilisée pour définir un récepteur de message. Veillez à remplacer l'espace réservé<storage-queue-name>par votre propre valeur.import com.azure.spring.integration.storage.queue.inbound.StorageQueueMessageSource; import com.azure.spring.messaging.AzureHeaders; import com.azure.spring.messaging.checkpoint.Checkpointer; import com.azure.spring.messaging.storage.queue.core.StorageQueueTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.annotation.InboundChannelAdapter; import org.springframework.integration.annotation.Poller; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.messaging.handler.annotation.Header; @Configuration public class QueueReceiveConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(QueueReceiveConfiguration.class); private static final String STORAGE_QUEUE_NAME = "<storage-queue-name>"; private static final String INPUT_CHANNEL = "input"; @Bean @InboundChannelAdapter(channel = INPUT_CHANNEL, poller = @Poller(fixedDelay = "1000")) public StorageQueueMessageSource storageQueueMessageSource(StorageQueueTemplate storageQueueTemplate) { return new StorageQueueMessageSource(STORAGE_QUEUE_NAME, storageQueueTemplate); } @ServiceActivator(inputChannel = INPUT_CHANNEL) public void messageReceiver(byte[] payload, @Header(AzureHeaders.CHECKPOINTER) Checkpointer checkpointer) { String message = new String(payload); LOGGER.info("Received message: {}", message); } }Créez une classe
QueueSendConfigurationJava, comme illustré dans l’exemple suivant. Cette classe est utilisée pour définir un expéditeur de messages. Veillez à remplacer l'espace réservé<storage-queue-name>par votre propre valeur.import com.azure.spring.integration.core.handler.DefaultMessageHandler; import com.azure.spring.messaging.storage.queue.core.StorageQueueTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.annotation.MessagingGateway; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.messaging.MessageHandler; import org.springframework.util.concurrent.ListenableFutureCallback; @Configuration public class QueueSendConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(QueueSendConfiguration.class); private static final String STORAGE_QUEUE_NAME = "<storage-queue-name>"; private static final String OUTPUT_CHANNEL = "output"; @Bean @ServiceActivator(inputChannel = OUTPUT_CHANNEL) public MessageHandler messageSender(StorageQueueTemplate storageQueueTemplate) { DefaultMessageHandler handler = new DefaultMessageHandler(STORAGE_QUEUE_NAME, storageQueueTemplate); handler.setSendCallback(new ListenableFutureCallback<Void>() { @Override public void onSuccess(Void result) { LOGGER.info("Message was sent successfully."); } @Override public void onFailure(Throwable ex) { LOGGER.info("There was an error sending the message."); } }); return handler; } @MessagingGateway(defaultRequestChannel = OUTPUT_CHANNEL) public interface StorageQueueOutboundGateway { void send(String text); } }Créez un émetteur et un récepteur pour envoyer et recevoir des messages avec Spring.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Configuration; import org.springframework.integration.config.EnableIntegration; @SpringBootApplication @EnableIntegration @Configuration(proxyBeanMethods = false) public class StorageQueueIntegrationApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(StorageQueueIntegrationApplication.class, args); QueueSendConfiguration.StorageQueueOutboundGateway storageQueueOutboundGateway = applicationContext.getBeanQueueSendConfiguration.StorageQueueOutboundGateway.class); storageQueueOutboundGateway.send("Hello World"); } }Conseil
N'oubliez pas d'ajouter l'annotation
@EnableIntegration, qui active l'infrastructure d'intégration Spring.Lancez l’application. Après le lancement, l'application produit des logs similaires à l'exemple suivant :
Message was sent successfully. Received message: 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
Voir aussi
Pour plus d’informations sur les démarrages Spring Boot disponibles pour Microsoft Azure, consultez Qu’est-ce que Spring Cloud Azure ?