Utilizzare Griglia di eventi di Azure con Spring

Questo articolo illustra come usare Griglia di eventi di Azure per inviare un evento a un argomento e usare bus di servizio Queue come gestore Event per ricevere in un'applicazione Spring Boot.

Il servizio Griglia di eventi di Azure è un servizio di distribuzione dei messaggi pub sub altamente scalabile e completamente gestito che offre modelli di consumo di messaggi flessibili usando i protocolli MQTT e HTTP.

Prerequisiti

Sottoscrivere un argomento personalizzato

Usare la procedura seguente per creare una sottoscrizione di eventi per indicare a Griglia di eventi di inviare eventi alla coda bus di servizio:

  1. Nel portale di Azure, vai alla tua istanza di Topic Event Grid.
  2. Selezionare iscrizioni agli eventi sulla barra degli strumenti.
  3. Nella pagina Crea sottoscrizione di eventi, immettere un valore di nome per la sottoscrizione di eventi.
  4. Per Endpoint Type selezionare bus di servizio Queue.
  5. Seleziona Seleziona un endpoint e quindi seleziona l'istanza della coda bus di servizio creata in precedenza.

Inviare un evento tramite Griglia di eventi di Azure e riceverlo tramite coda di bus di servizio di Azure.

Con una risorsa Griglia di eventi di Azure è possibile inviare un evento usando Spring Cloud Griglia di eventi di Azure. Con una risorsa queue bus di servizio di Azure come gestore eventi, è possibile ricevere l'evento usando Spring Cloud Azure Stream Binder per bus di servizio.

Per installare il modulo Spring Cloud Griglia di eventi di Azure Starter e il modulo bus di servizio Azure Stream Binder Spring Cloud, aggiungere le dipendenze seguenti al file pom.xml:

  • Spring Cloud Azure Bill of Materials (Elenco dei Materiali, BOM):

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

    Nota

    Se si usa Spring Boot 4.0.x, assicurarsi di impostare la spring-cloud-azure-dependencies versione su 7.2.0.

    Se si usa Spring Boot 3.5.x, assicurarsi di impostare la spring-cloud-azure-dependencies versione su 6.2.0.

    Se si usa Spring Boot 3.1.x-3.5.x, assicurarsi di impostare la spring-cloud-azure-dependencies versione su 5.25.0.

    Se si usa Spring Boot 2.x, assicurarsi di impostare la spring-cloud-azure-dependencies versione su 4.20.0.

    Questo Bill of Material (BOM) deve essere configurato nella sezione <dependencyManagement> del file pom.xml. In questo modo, tutte le dipendenze di Spring Cloud Azure usano la stessa versione.

    Per ulteriori informazioni sulla versione utilizzata per questo BOM, consultare Quale versione di Spring Cloud Azure dovrei usare.

  • L'artefatto Spring Cloud Griglia di eventi di Azure Starter:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-eventgrid</artifactId>
    </dependency>
    
  • Artefatto bus di servizio Spring Cloud Azure Stream Binder:

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

Scrivere il codice dell'applicazione

Usare la procedura seguente per configurare l'applicazione per inviare un evento usando Griglia di eventi e ricevere tramite bus di servizio Queue.

  1. Configurare le credenziali di Griglia di eventi di Azure e bus di servizio nel file di configurazione application.yaml, come illustrato nell'esempio seguente:

    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
    

    Nota

    Microsoft consiglia di usare il flusso di autenticazione più sicuro disponibile. Il flusso di autenticazione descritto in questa procedura, ad esempio per database, cache, messaggistica o servizi di intelligenza artificiale, richiede un livello di attendibilità molto elevato nell'applicazione e comporta rischi non presenti in altri flussi. Usare questo flusso solo quando le opzioni più sicure, ad esempio le identità gestite per le connessioni senza password o senza chiave, non sono valide. Per le operazioni del computer locale, preferire le identità utente per le connessioni senza password o senza chiave.

  2. Modificare il file della classe di avvio per visualizzare il contenuto seguente. Questo codice genera completamenti.

    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. Avviare l'applicazione. Dopo l'avvio, l'applicazione produce log simili all'esempio seguente:

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

Effettuare la distribuzione su Azure Spring Apps

Ora che l'applicazione Spring Boot è in esecuzione in locale, è possibile spostarla nell'ambiente di produzione. Azure Spring Apps semplifica la distribuzione di applicazioni Spring Boot in Azure senza modifiche al codice. Il servizio gestisce l'infrastruttura delle applicazioni Spring in modo che gli sviluppatori possano concentrarsi sul codice. Azure Spring Apps offre la gestione del ciclo di vita usando monitoraggio e diagnostica completi, gestione della configurazione, individuazione dei servizi, integrazione CI/CD, distribuzioni blu-verde e altro ancora. Per distribuire l'applicazione in Azure Spring Apps, vedere Distribuire la prima applicazione in Azure Spring Apps.

Passaggi successivi

Per altre informazioni su Spring e Azure, passare al centro documentazione Spring on Azure.