Utiliser Azure Event Grid dans Spring

Cet article explique comment utiliser Azure Event Grid pour envoyer un événement à une rubrique et utiliser la file d’attente Service Bus en tant que gestionnaire d’événements pour recevoir dans une application Spring Boot.

Le service Azure Event Grid est un service de distribution de sous-messages pub hautement évolutif et entièrement managé qui offre des modèles de consommation de messages flexibles à l’aide des protocoles MQTT et HTTP.

Prérequis

S’abonner à une rubrique personnalisée

Pour créer un abonnement aux événements, procédez comme suit pour indiquer à Event Grid d’envoyer des événements à la file d’attente Service Bus :

  1. Dans le Portail Azure, accédez à votre instance de rubrique Event Grid.
  2. Sélectionnez Abonnements aux événements dans la barre d’outils.
  3. Dans la page Créer un abonnement aux événements, entrez une valeur de nom pour l’abonnement à l’événement.
  4. Pour le type de point de terminaison, sélectionnez File d’attente Service Bus.
  5. Sélectionnez un point de terminaison , puis sélectionnez l’instance de file d’attente Service Bus que vous avez créée précédemment.

Envoyer un événement par Azure Event Grid et recevoir par file d’attente Azure Service Bus

Avec une ressource Azure Event Grid, vous pouvez envoyer un événement à l’aide de Spring Cloud Azure Event Grid. Avec une ressource file d’attente Azure Service Bus en tant que gestionnaire d’événements, vous pouvez recevoir l’événement à l’aide de Spring Cloud Azure Stream Binder pour Service Bus.

Pour installer le module Spring Cloud Azure Event Grid Starter et le module Spring Cloud Azure Stream Binder Service Bus, 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.12.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 version 4.18.0sur . 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 Event Grid Starter :

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-eventgrid</artifactId>
    </dependency>
    
  • Artefact Spring Cloud Azure Stream Binder Service Bus :

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId>
    </dependency>
    

Coder l’application

Procédez comme suit pour configurer votre application afin d’envoyer un événement à l’aide d’Event Grid et de recevoir à l’aide de la file d’attente Service Bus.

  1. Configurez les informations d’identification Azure Event Grid et Service Bus dans le fichier de configuration application.yaml , comme illustré dans l’exemple suivant :

    spring:
      cloud:
        azure:
          eventgrid:
            endpoint: ${AZURE_EVENTGRID_ENDPOINT}
            key: ${AZURE_EVENTGRID_KEY}
          servicebus:
            connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
        function:
          definition: consume
        stream:
          bindings:
            consume-in-0:
              destination: ${AZURE_SERVICEBUS_QUEUE_NAME}
          servicebus:
            bindings:
              consume-in-0:
                consumer:
                  auto-complete: false
    
  2. Modifiez le fichier de classe de démarrage pour afficher le contenu suivant. Ce code génère des achèvements.

    import com.azure.core.util.BinaryData;
    import com.azure.messaging.eventgrid.EventGridEvent;
    import com.azure.messaging.eventgrid.EventGridPublisherClient;
    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.context.annotation.Bean;
    import org.springframework.messaging.Message;
    
    import java.util.List;
    import java.util.function.Consumer;
    
    @SpringBootApplication
    public class EventGridSampleApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(EventGridSampleApplication.class);
    
        @Autowired
        EventGridPublisherClient<EventGridEvent> client;
    
        public static void main(String[] args) {
            SpringApplication.run(EventGridSampleApplication.class, args);
        }
    
        @Bean
        public Consumer<Message<String>> consume() {
            return message -> {
                List<EventGridEvent> eventData = EventGridEvent.fromString(message.getPayload());
                eventData.forEach(event -> {
                    LOGGER.info("New event received: '{}'", event.getData());
                });
            };
        }
    
        @Override
        public void run(String... args) throws Exception {
            String str = "FirstName: John, LastName: James";
            EventGridEvent event = new EventGridEvent("A user is created", "User.Created.Text", BinaryData.fromObject(str), "0.1");
    
            client.sendEvent(event);
            LOGGER.info("New event published: '{}'", event.getData());
        }
    }
    
    
  3. Lancez l’application. Après le lancement, l’application produit des journaux similaires à l’exemple suivant :

    New event published: '"FirstName: John, LastName: James"'
    ...
    New event received: '"FirstName: John, LastName: James"'
    

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.

Étapes suivantes

Pour en savoir plus sur Spring et Azure, poursuivez vers le centre de documentation Spring sur Azure.