Partager via


Utiliser Azure Event Grid dans Spring

Cet article explique comment utiliser Azure Event Grid pour envoyer un événement à un sujet 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 messages pub sub hautement évolutif et entièrement géré qui offre des modèles de consommation de messages flexibles à l’aide des protocoles MQTT et HTTP.

Conditions préalables

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 Abonnement aux événements (Event Subscriptions) dans la barre d’outils.
  3. Sur la page Créer un abonnement aux événements (Create Event Subscription), saisissez une valeur pour name pour l’abonnement aux événements.
  4. Pour Endpoint Type, sélectionnez Service Bus Queue.
  5. Choisissez 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 :

  • Le Bill of Materials (BOM) de Spring Cloud Azure :

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.19.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Remarque

    Si vous utilisez Spring Boot 2.x, veillez à définir la version spring-cloud-azure-dependencies sur 4.19.0. Cette bill of Material (BOM) doit être configurée dans la section <dependencyManagement> 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 Quelle version de Spring Cloud Azure dois-je utiliser.

  • L’artefact Spring Cloud Azure Event Grid Starter :

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-eventgrid</artifactId>
    </dependency>
    
  • L'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 complétions.

    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. Démarrez l’application. Après le lancement, l’application produit des logs 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 du code. Le service gère l’infrastructure des applications Spring afin que les développeurs puissent se concentrer sur leur code. Azure Spring Apps fournit une gestion du cycle de vie à l’aide de la surveillance 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 Déployer votre première application sur Azure Spring Apps.

Étapes suivantes

Pour en savoir plus sur Spring et Azure, passez au centre de documentation Spring sur Azure.