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 Event Hubs. Spring Framework offre une prise en charge étendue de l’intégration à des systèmes de messagerie.
Messagerie Spring Azure Event Hubs
Concepts clés
Azure Event Hubs est un service de streaming de données natif dans le cloud qui peut diffuser des millions d’événements par seconde, avec une faible latence, de n’importe quelle source à n’importe quelle destination. Le projet Spring Messaging pour Azure Event Hubs applique les principaux concepts Spring au développement de solutions de messagerie basées sur event hubs. Il fournit un modèle en tant qu’abstraction générale pour l’envoi de messages. Il prend également en charge les objets Java simples (POJO) pilotés par messages avec des annotations @EventHubsListener 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-eventhubs</artifactId>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
</dependency>
Paramétrage
La bibliothèque fournit les options de configuration suivantes pour EventHubsTemplate et @EventHubsListener:
| 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 Event Hubs. Activé par défaut. |
spring.cloud.azure.eventhubs.enabled |
boolean | Indique si azure Event Hubs est activé. |
spring.cloud.azure.eventhubs.connection-string |
Chaîne | Valeur de chaîne de connexion de l’espace de noms Event Hubs. |
spring.cloud.azure.eventhubs.namespace |
Chaîne | Valeur de l’espace de noms Event Hubs, qui est le préfixe du FQDN. Un FQDN doit se composer de NamespaceName.DomainName |
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name |
Chaîne | Nom du compte de stockage. |
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key |
Chaîne | Clé d’accès au compte de stockage. |
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name |
Chaîne | Nom du conteneur de stockage. |
Utilisation de base
Convertisseur de messages Event Hubs personnalisé
Il existe deux façons de configurer le convertisseur de messages Event Hubs :
Configurez la propriété suivante pour que le convertisseur de messages Event Hubs 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 Event Hubs :
@Bean AzureMessageConverter<EventData, EventData> eventHubsMessageConverter() { JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build(); return new EventHubsMessageConverter(jsonMapper); }
Envoyer des messages à Azure Event Hubs
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: eventhubs: namespace: ${AZURE_EVENT_HUBS_NAMESPACE} processor: checkpoint-store: container-name: ${CHECKPOINT-CONTAINER} account-name: ${CHECKPOINT-STORAGE-ACCOUNT}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: eventhubs: connection-string: ${AZURE_EVENT_HUBS_CONNECTION_STRING} processor: checkpoint-store: container-name: ${CHECKPOINT-CONTAINER} account-name: ${CHECKPOINT-STORAGE-ACCOUNT} account-key: ${CHECKPOINT-ACCESS-KEY}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} eventhubs: namespace: ${AZURE_EVENT_HUBS_NAMESPACE} processor: checkpoint-store: container-name: ${CONTAINER_NAME} account-name: ${ACCOUNT_NAME}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> eventhubs: namespace: ${AZURE_EVENT_HUBS_NAMESPACE} processor: checkpoint-store: container-name: ${CONTAINER_NAME} account-name: ${ACCOUNT_NAME}
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.
EventHubsTemplateest 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 EventHubsTemplate eventHubsTemplate; public MyBean(EventHubsTemplate eventHubsTemplate) { this.eventHubsTemplate = eventHubsTemplate; } public void someMethod() { this.eventHubsTemplate.sendAsync('EVENT_HUB_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe(); } }
Recevoir des messages d’Azure Event Hubs
Pour recevoir des messages, procédez comme suit :
Renseignez les options de configuration des informations d’identification.
Ajoutez l’annotation
@EnableAzureMessaging, comme illustré dans l’exemple suivant. Cette annotation déclenche la découverte de méthodes annotées avec@EventHubsListener, en créant le conteneur d’écouteurs de messages sous les couvertures.@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 Event Hubs est présente, vous pouvez annoter n’importe quel bean avec
@EventHubsListenerpour créer un point de terminaison d’écoute. Le composant suivant crée un point de terminaison d’écouteur sur le hub d’événementsEVENT_HUB_NAMEet le groupe de consommateurs$Default:@Component public class MyBean { @EventHubsListener(destination = "EVENT_HUB_NAME", group = "$Default") public void processMessage(String content) { // ... } }
Échantillons
Pour plus d’informations, consultez le azure-spring-boot-samples référentiel sur GitHub.