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 explique comment utiliser Spring Cloud Azure et Spring Messaging Azure Service Bus. Spring Framework offre une prise en charge étendue de l’intégration à des systèmes de messagerie.
Messagerie Spring Azure Service Bus
Concepts clés
Azure Service Bus est un répartiteur de messages d’entreprise complètement managé, avec des files d’attente de messages et des rubriques de publication/abonnement. Le projet Spring Messaging pour Azure Service Bus applique les principaux concepts Spring au développement de solutions de messagerie basées sur Service Bus. Il fournit un modèle en tant qu’abstraction générale pour l’envoi de messages. Il prend également en charge les POJO pilotés par les messages avec des annotations @ServiceBusListener et un conteneur de listeners. Ces bibliothèques favorisent l’utilisation de l’injection de dépendances et de la configuration déclarative. Dans tous ces cas, vous pouvez constater des similitudes avec la prise en charge de JMS dans le Spring Framework et la prise en charge de RabbitMQ dans Spring AMQP.
Configuration des dépendances
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-messaging-azure-servicebus</artifactId>
</dependency>
Paramétrage
La bibliothèque fournit les options de configuration suivantes pour ServiceBusTemplate et @ServiceBusListener:
| Propriété | Type | Descriptif |
|---|---|---|
spring.cloud.azure.message-converter.isolated-object-mapper |
boolean | Indique si une bean ObjectMapper isolée est utilisée pour le convertisseur de messages Service Bus. Activé par défaut. |
spring.cloud.azure.servicebus.enabled |
boolean | Indique si Azure Service Bus est activé. |
spring.cloud.azure.servicebus.connection-string |
Chaîne | Valeur de chaîne de connexion de l’espace de noms Service Bus. |
spring.cloud.azure.servicebus.custom-endpoint-address |
Chaîne | Adresse de point de terminaison personnalisée à utiliser lors de la connexion à Service Bus. |
spring.cloud.azure.servicebus.namespace |
Chaîne | Valeur de l’espace de noms de Service Bus, qui constitue le préfixe du FQDN. Un FQDN doit se composer de NamespaceName.DomainName |
spring.cloud.azure.servicebus.entity-type |
Chaîne | Type d’entité d’azure Service Bus. |
Utilisation de base
Convertisseur de messages Service Bus personnalisé
Il existe deux façons de configurer le convertisseur de messages Service Bus :
Configurez la propriété suivante pour que le convertisseur de messages Service Bus par défaut utilise un
ObjectMapperbean, qui peut être votre bean personnaliséObjectMapperou un géré par Spring Boot :spring: cloud: azure: message-converter: isolated-object-mapper: falseDéfinissez directement le convertisseur de messages Service Bus :
@Bean AzureMessageConverter<ServiceBusReceivedMessage, ServiceBusMessage> serviceBusMessageConverter() { JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build(); return new ServiceBusMessageConverter(jsonMapper); }
Envoyer des messages à Azure Service Bus
Pour envoyer des messages, procédez comme suit :
Renseignez les options de configuration des informations d’identification à l’aide de l’une des approches suivantes :
Pour les informations d’identification en tant que
DefaultAzureCredential, configurez les propriétés suivantes dans votre fichier application.yml :spring: cloud: azure: servicebus: namespace: ${AZURE_SERVICE_BUS_NAMESPACE} entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}Pour les informations d’identification sous forme de chaîne de connexion, configurez les propriétés suivantes dans votre fichier application.yml :
spring: cloud: azure: servicebus: connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING} entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}Pour les informations d’identification en tant qu’identités managées, configurez les propriétés suivantes dans votre fichier application.yml :
spring: cloud: azure: credential: managed-identity-enabled: true client-id: ${AZURE_CLIENT_ID} profile: tenant-id: <tenant> servicebus: namespace: ${AZURE_SERVICE_BUS_NAMESPACE} entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
Remarque
Les valeurs suivantes sont autorisées pour tenant-id: common, organizations, consumersou l’ID de locataire. Pour plus d’informations sur ces valeurs, consultez la section Utilisation d’un point de terminaison incorrect (comptes personnels et d’organisation) de l’article Erreur AADSTS50020 : Le compte d’utilisateur du fournisseur d’identité n’existe pas dans le locataire. Pour plus d’informations sur la conversion de votre application monolocataire, consultez Convertir une application monolocataire en application multilocataire sur Microsoft Entra ID.
Pour les informations d’identification en tant que principal de service, configurez les propriétés suivantes dans votre fichier application.yml :
spring: cloud: azure: credential: client-id: ${AZURE_CLIENT_ID} client-secret: ${AZURE_CLIENT_SECRET} profile: tenant-id: <tenant> servicebus: namespace: ${AZURE_SERVICE_BUS_NAMESPACE} entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
Remarque
Les valeurs suivantes sont autorisées pour tenant-id: common, organizations, consumersou l’ID de locataire. Pour plus d’informations sur ces valeurs, consultez la section Utilisation d’un point de terminaison incorrect (comptes personnels et d’organisation) de l’article Erreur AADSTS50020 : Le compte d’utilisateur du fournisseur d’identité n’existe pas dans le locataire. Pour plus d’informations sur la conversion de votre application monolocataire, consultez Convertir une application monolocataire en application multilocataire sur Microsoft Entra ID.
ServiceBusTemplateest configuré automatiquement, et vous pouvez l’injecter automatiquement directement dans vos propres beans, comme indiqué dans l’exemple suivant :@Component public class MyBean { private final ServiceBusTemplate serviceBusTemplate; public MyBean(ServiceBusTemplate serviceBusTemplate) { this.serviceBusTemplate = serviceBusTemplate; } public void someMethod() { this.serviceBusTemplate.sendAsync('QUEUE_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe(); } }
Recevoir des messages d’Azure Service Bus
Pour recevoir des messages, procédez comme suit :
Renseignez les options de configuration des informations d’identification.
Ajoutez l’annotation
@EnableAzureMessaging, qui déclenche la découverte des méthodes annotées avec@ServiceBusListeneret crée en arrière-plan le conteneur d’écouteurs de messages.@SpringBootApplication @EnableAzureMessaging public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }Remarque
Pour éviter les répétitions, depuis la version
5.21.0, Spring Cloud Azure Auto-configure active automatiquement l’annotation@EnableAzureMessaging.Lorsque l’infrastructure ServiceBus est présente, vous pouvez annoter n’importe quel bean avec
@ServiceBusListenerpour créer un point de terminaison d’écoute. Le composant suivant crée un point de terminaison d’écouteur sur la file d’attenteQUEUE_NAME:@Component public class MyBean { @ServiceBusListener(destination = "QUEUE_NAME") public void processMessage(String content) { // ... } }
Personnaliser les propriétés du client Service Bus
Les développeurs peuvent utiliser AzureServiceClientBuilderCustomizer pour personnaliser les propriétés du client Service Bus. L’exemple suivant personnalise la propriété sessionIdleTimeout dans ServiceBusClientBuilder:
@Bean
public AzureServiceClientBuilderCustomizer<ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder> customizeBuilder() {
return builder -> builder.sessionIdleTimeout(Duration.ofSeconds(10));
}
Échantillons
Pour plus d’informations, consultez le azure-spring-boot-samples référentiel sur GitHub.