Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come usare Azure Event Grid per inviare un evento a un topic e usare la coda del Service Bus come gestore eventi 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
Una sottoscrizione di Azure: crearne una gratuitamente.
Java Development Kit (JDK) versione 8 o successiva.
Apache Maven, versione 3.0 o successiva.
Istanza di un argomento di Event Grid. Se non ne hai uno, consulta Creare un argomento personalizzato o un dominio in Azure Event Grid.
Istanza della coda del Bus di Servizio. Se non ne hai uno, consultare Creare una coda nel portale di Azure.
Applicazione Spring Boot. Se non ne hai uno, crea un progetto Maven con il Spring Initializr. Assicurati di selezionare Progetto Maven e scegliere la versione 8 o successiva di Java.
Sottoscrivere un argomento personalizzato
Usare la procedura seguente per creare una sottoscrizione di eventi per indicare a Event Grid di inviare eventi alla Service Bus Queue.
- Nel portale di Azure, naviga alla tua istanza di Event Grid Topic.
- Selezionare iscrizioni agli eventi sulla barra degli strumenti.
- Nella pagina Crea sottoscrizione di eventi, immettere un valore di nome per la sottoscrizione di eventi.
- Per Tipo di endpoint, selezionare Service Bus Queue.
- Scegliere Selezionare un endpoint e quindi selezionare l'istanza della coda del bus di servizio creata in precedenza.
Invia un evento tramite Azure Event Grid e ricevilo tramite Azure Service Bus Queue
Con una risorsa di Azure Event Grid, è possibile inviare un evento utilizzando Spring Cloud Azure Event Grid. Con una risorsa coda di Azure Service Bus come gestore di eventi, è possibile ricevere l'evento usando Spring Cloud Azure Stream Binder per Service Bus.
Per installare il modulo Spring Cloud Azure Event Grid Starter e il modulo Spring Cloud Stream Binder Service Bus, aggiungere le dipendenze seguenti al file pom.xml:
Spring Cloud Azure Elenco Materiali (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Nota
Se si usa Spring Boot 3.0.x-3.4.x, assicurarsi di impostare la
spring-cloud-azure-dependenciesversione su5.23.0.Se si usa Spring Boot 2.x, assicurarsi di impostare la versione
spring-cloud-azure-dependenciessu4.20.0.Questa distinta base deve essere configurata nella sezione
<dependencyManagement>del file di pom.xml. In questo modo tutte le dipendenze di Spring Cloud Azure usano la stessa versione.Per ulteriori informazioni sulla versione utilizzata per questa distinta base, vedere la sezione Quale versione di Spring Cloud Azure dovrei utilizzare.
Artefatto di Spring Cloud Azure Event Grid Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-eventgrid</artifactId> </dependency>Artefatto di Spring Cloud Azure Stream Binder Service Bus.
<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 tramite Event Grid e riceverlo tramite la coda di Service Bus Queue.
Configurare le credenziali di Azure Event Grid e Service Bus 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: falseNota
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.
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()); } }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"'
Distribuire 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 di Spring in Azure.