Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan használhatja a Azure Event Hubs Java Spring-keretrendszerrel készült alkalmazásokban.
Azure Event Hubs egy big data streamplatform és eseménybetöltési szolgáltatás. Másodpercenként több millió eseményt képes fogadni és feldolgozni. Az eseményközpontokba elküldött adatok bármilyen valós idejű elemzési szolgáltató vagy kötegelési/tárolóadapter segítségével átalakíthatók és tárolhatók.
A Spring Cloud Azure különböző modulokat biztosít az Event Hubsba érkező és fogadott üzenetekhez a Spring-keretrendszerek használatával.
A következő modulokat egymástól függetlenül használhatja, vagy kombinálhatja őket különböző használati esetekhez:
Spring Cloud Azure Event Hubs Starter lehetővé teszi üzenetek küldését és fogadását az Event Hubs Java SDK ügyféloldali kódtárával Spring Boot-funkciókkal.
Spring Messaging Azure Event Hubs lehetővé teszi, hogy az Event Hubs szolgáltatással Spring Messaging API-n keresztül kommunikáljon.
Spring Integration Azure Event Hubs lehetővé teszi a Spring Integration Message csatornák csatlakoztatását az Event Hubshoz.
Spring Cloud Azure Stream Event Hubs Binder lehetővé teszi az Event Hubs üzenetközvetítő köztes szoftverként való használatát Spring Cloud Stream alkalmazásokban.
Spring Kafka és Azure Event Hubs lehetővé teszi, hogy Spring Kafka használatával üzeneteket küldjön és fogadjon az Event Hubstól.
Spring Cloud Stream Kafka Binder és Azure Event Hubs lehetővé teszi az üzenetek küldését és fogadását a Spring Cloud Stream Kafka Binderen keresztül az Event Hubs használatával.
Előfeltételek
Egy Azure előfizetés – ingyenes előfizetés.
Java Fejlesztői készlet (JDK), 8-es vagy újabb verzió.
Egy Azure Event Hubs példány. További információ: Feliratok: Eseményközpont létrehozása Azure portál használatával.
Egy Azure Storage-fiók az Event Hubs ellenőrzőpontjaihoz. További információ: Tárfiók létrehozása.
Egy Spring Boot-alkalmazás. Ha nem rendelkezik ilyennel, hozzon létre egy Maven-projektet a Spring Initializrrel. Ne felejtse el kiválasztani a Maven Project lehetőséget, majd a Dependencies területen adja hozzá a Spring web függőséget, majd válassza Java 8- vagy újabb verziót.
Feljegyzés
Ha hozzáférést szeretne adni a fiókjának az erőforrásokhoz, az Azure Event Hubsban rendelje az Azure Event Hubs Data Receiver és Azure Event Hubs Data Sender szerepköröket az éppen használt Microsoft Entra fiókhoz. Ezután a Azure Storage fiókban rendelje hozzá a Storage Blob Data Contributor szerepkört az éppen használt Microsoft Entra fiókhoz. A hozzáférési szerepkörök engedélyezésével kapcsolatos további információkért lásd: Az Azure szerepkörök hozzárendelése a Azure portálon és Az Event Hubs-erőforrásokhoz való hozzáférés engedélyezése Microsoft Entra ID használatával.
Fontos
Az oktatóanyag lépéseinek elvégzéséhez a Spring Boot 2.5-ös vagy újabb verziójára van szükség.
A helyi környezet előkészítése
Ebben az oktatóanyagban a konfigurációk és a kód nem rendelkeznek hitelesítési műveletekkel. Az Azure szolgáltatáshoz való csatlakozáshoz azonban hitelesítés szükséges. A hitelesítés befejezéséhez a Azure Identity ügyfélkódtárat kell használnia. A Spring Cloud Azure DefaultAzureCredential használ, amelyet az Azure Identitástár biztosít a hitelesítő adatok kódmódosítások nélküli beszerzéséhez.
DefaultAzureCredential több hitelesítési módszert támogat, és meghatározza, hogy melyik metódust használja futásidőben. Ez a megközelítés lehetővé teszi, hogy az alkalmazás különböző hitelesítési módszereket használjon különböző környezetekben – például helyi vagy éles környezetekben – környezetspecifikus kód implementálása nélkül. További információért lásd a DefaultAzureCredential szakaszt az Authenticate Azure által üzemeltetett Java alkalmazások című részben.
Ha Azure CLI, IntelliJ vagy más módszereket szeretne használni a helyi fejlesztési környezetekben történő hitelesítés befejezéséhez, tekintse meg Azure hitelesítést Java fejlesztési környezetekben. A hitelesítés Azure üzemeltetési környezetekben való befejezéséhez ajánlott felügyelt identitást használni. További információ: Mi az Azure-erőforrások felügyelt identitásai?
Spring Cloud Azure Event Hubs Starter használata
A Spring Cloud Azure Event Hubs Starter modul importálja a Event Hubs Java ügyfélkódtárat a Spring Boot keretrendszerrel. A Spring Cloud Azure-t és az Azure SDK-t együtt használhatja úgy, hogy az nem kölcsönösen kizárólagos. Így továbbra is használhatja az Event Hubs Java ügyfél API-t a Spring-alkalmazásban.
Függőségek hozzáadása
A Spring Cloud Azure Event Hubs Starter modul telepítéséhez adja hozzá a következő függőségeket a pom.xml fájlhoz:
A Spring Cloud Azure Anyagjegyzék (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Feljegyzés
Ha Spring Boot 4.0.x-et használ, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre7.4.0: .Ha a Spring Boot 3.5.x-et használja, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre6.5.0: .Ha a Spring Boot 3.1.x-3.5.x verziót használja, mindenképpen állítsa be a verziót
spring-cloud-azure-dependencies-ra/c1.Ha a Spring Boot 2.x-et használja, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót4.20.0-re.Ezt az anyagjegyzéket (BOM) a
<dependencyManagement>fájl szakaszában kell konfigurálni. Ez biztosítja, hogy minden Spring Cloud-Azure függőség ugyanazt a verziót használja.Az anyagjegyzékhez használt verzióval kapcsolatos további információkért lásd: Melyik verzióját a Spring Cloud Azure-nak érdemes használnom?.
A Spring Cloud Azure Event Hubs összetevő:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-eventhubs</artifactId> </dependency>
Az alkalmazás kódolása üzenetek küldéséhez és fogadásához
Ez az útmutató bemutatja, hogyan használhatja az Event Hubs Java-ügyfeleket egy Spring-alkalmazás kontextusában. Itt a következő két lehetőséget mutatjuk be:
- Használja a Spring Boot automatikus konfigurálását, és használja a Spring-környezetből származó beépített ügyfeleket (ajánlott).
- Hozza létre a klienst programozás útján.
A Spring IoC konténerből származó kliens bean-ek automatikus kábelezésének módja a következő előnyökkel jár, amelyek rugalmasabb és hatékonyabb élményt nyújtanak a fejlesztési folyamat során az Event Hubs ügyfelekkel.
- A külső konfigurációt alkalmazza, hogy ugyanazt az alkalmazáskódot használhassa különböző környezetekben.
- A Spring Boot-keretrendszerbe delegálhatja a szerkesztői minta megismerésének és az ügyfél alkalmazáskörnyezetbe való regisztrálásának folyamatát. Ezzel a delegálással arra összpontosíthat, hogyan használhatja az ügyfeleket saját üzleti igényei szerint.
- Az állapotjelző segítségével egyszerűen megvizsgálhatja az alkalmazás és a belső összetevők állapotát és állapotát.
Az alábbi szakaszok olyan kódpéldákat mutatnak be, amelyek megmutatják, hogyan használhatja a EventProcessorClient és EventHubProducerClient a két alternatíva esetében.
Feljegyzés
Azure Java Event Hubshoz készült SDK több ügyfelet is biztosít az Event Hubs használatához. A starter automatikus konfigurálást is biztosít az összes Event Hubs-ügyfélhez, valamint az ügyfélkészítőkhöz. Ez a cikk csak EventProcessorClientEventHubProducerClient példákat használ.
A Spring Boot automatikus konfigurációjának használata
Ha üzeneteket szeretne küldeni és fogadni az Event Hubstól, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Az Event Hubs-névtér és az eseményközpont nevének konfigurálásához használja a következő tulajdonságbeállításokat:
spring.cloud.azure.eventhubs.namespace=<your event-hubs-namespace> spring.cloud.azure.eventhubs.event-hub-name=<your-event-hub-name> spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name=<your-storage-account-name> spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name=<your-storage-account-container-name> spring.cloud.azure.eventhubs.processor.consumer-group=$DefaultHozzon létre egy új
EventHubProcessorClientConfigurationJava osztályt az alábbi példában látható módon. Ez az osztály az üzenet és a hibakezelő regisztrálásáhozEventProcessorClienthasználható.import com.azure.spring.cloud.service.eventhubs.consumer.EventHubsErrorHandler; import com.azure.spring.cloud.service.eventhubs.consumer.EventHubsRecordMessageListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class EventHubProcessorClientConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(EventHubProcessorClientConfiguration.class); @Bean EventHubsRecordMessageListener processEvent() { return eventContext->LOGGER.info("Processing event from partition {} with sequence number {} with body: {}", eventContext.getPartitionContext().getPartitionId(), eventContext.getEventData().getSequenceNumber(), eventContext.getEventData().getBodyAsString()); } @Bean EventHubsErrorHandler processError() { return errorContext->LOGGER.info("Error occurred in partition processor for partition {}, {}", errorContext.getPartitionContext().getPartitionId(), errorContext.getThrowable()); } }Injektálja a
EventProcessorClientésEventHubProducerClientelemeket a Spring-alkalmazásába, majd hívja meg a kapcsolódó API-kat üzenetek küldéséhez és fogadásához, ahogyan az a következő példában látható.import com.azure.messaging.eventhubs.EventData; import com.azure.messaging.eventhubs.EventHubProducerClient; import com.azure.messaging.eventhubs.EventProcessorClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import java.util.Collections; import java.util.concurrent.TimeUnit; @SpringBootApplication public class EventHubClientApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(EventHubClientApplication.class); private final EventHubProducerClient eventHubProducerClient; private final EventProcessorClient eventProcessorClient; public EventHubClientApplication(EventHubProducerClient eventHubProducerClient, EventProcessorClient eventProcessorClient) { this.eventHubProducerClient = eventHubProducerClient; this.eventProcessorClient = eventProcessorClient; } public static void main(String[] args) { SpringApplication.run(EventHubClientApplication.class, args); } @Override public void run(String... args) throws Exception { eventProcessorClient.start(); // Wait for the processor client to be ready TimeUnit.SECONDS.sleep(10); eventHubProducerClient.send(Collections.singletonList(new EventData("Hello World"))); LOGGER.info("Successfully sent a message to Event Hubs."); eventHubProducerClient.close(); LOGGER.info("Skip stopping and closing the processor since the processor may not complete the receiving process yet."); } }Indítsa el az alkalmazást. A következő példához hasonló naplók jelennek meg:
Successfully sent a message to Event Hubs. ... Processing event from partition 0 with sequence number 0 with body: Hello World ... Stopping and closing the processor.
Az ügyfél programozott módon történő létrehozása
Az ügyfélkomponenseket önállóan is létrehozhatja, de a folyamat bonyolult. A Spring Boot-alkalmazásokban kezelnie kell a tulajdonságokat, meg kell tanulnia a szerkesztői mintát, és regisztrálnia kell az ügyfelet a Spring-alkalmazás környezetében. A következő lépések bemutatják, hogyan teheti ezt meg:
Hozzon létre egy új
EventHubClientConfigurationJava osztályt az alábbi példában látható módon. Ez az osztály aEventProcessorClientésEventHubProducerClientbean-ek deklarálásához használatos. Mindenképpen cserélje le a<your event-hubs-namespace>,<your-event-hub-name>,<your-storage-account-name>és<your-storage-account-container-name>helyőrzőket a tényleges értékekre.import com.azure.identity.DefaultAzureCredentialBuilder; import com.azure.messaging.eventhubs.EventHubClientBuilder; import com.azure.messaging.eventhubs.EventHubProducerClient; import com.azure.messaging.eventhubs.EventProcessorClient; import com.azure.messaging.eventhubs.EventProcessorClientBuilder; import com.azure.messaging.eventhubs.checkpointstore.blob.BlobCheckpointStore; import com.azure.messaging.eventhubs.models.ErrorContext; import com.azure.messaging.eventhubs.models.EventContext; import com.azure.storage.blob.BlobContainerAsyncClient; import com.azure.storage.blob.BlobContainerClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class EventHubClientConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(EventHubClientConfiguration.class); private static final String EVENT_HUB_FULLY_QUALIFIED_NAMESPACE = "<your event-hubs-namespace>.servicebus.windows.net"; private static final String EVENT_HUB_NAME = "<your-event-hub-name>"; private static final String CONSUMER_GROUP = "$Default"; private static final String STORAGE_ACCOUNT_ENDPOINT = "https://<your-storage-account-name>.blob.core.windows.net"; private static final String STORAGE_CONTAINER_NAME = "<your-storage-account-container-name>"; @Bean EventHubClientBuilder eventHubClientBuilder() { return new EventHubClientBuilder().credential(EVENT_HUB_FULLY_QUALIFIED_NAMESPACE, EVENT_HUB_NAME, new DefaultAzureCredentialBuilder() .build()); } @Bean BlobContainerClientBuilder blobContainerClientBuilder() { return new BlobContainerClientBuilder().credential(new DefaultAzureCredentialBuilder() .build()) .endpoint(STORAGE_ACCOUNT_ENDPOINT) .containerName(STORAGE_CONTAINER_NAME); } @Bean BlobContainerAsyncClient blobContainerAsyncClient(BlobContainerClientBuilder blobContainerClientBuilder) { return blobContainerClientBuilder.buildAsyncClient(); } @Bean EventProcessorClientBuilder eventProcessorClientBuilder(BlobContainerAsyncClient blobContainerAsyncClient) { return new EventProcessorClientBuilder().credential(EVENT_HUB_FULLY_QUALIFIED_NAMESPACE, EVENT_HUB_NAME, new DefaultAzureCredentialBuilder() .build()) .consumerGroup(CONSUMER_GROUP) .checkpointStore(new BlobCheckpointStore(blobContainerAsyncClient)) .processEvent(EventHubClientConfiguration::processEvent) .processError(EventHubClientConfiguration::processError); } @Bean EventHubProducerClient eventHubProducerClient(EventHubClientBuilder eventHubClientBuilder) { return eventHubClientBuilder.buildProducerClient(); } @Bean EventProcessorClient eventProcessorClient(EventProcessorClientBuilder eventProcessorClientBuilder) { return eventProcessorClientBuilder.buildEventProcessorClient(); } public static void processEvent(EventContext eventContext) { LOGGER.info("Processing event from partition {} with sequence number {} with body: {}", eventContext.getPartitionContext().getPartitionId(), eventContext.getEventData().getSequenceNumber(), eventContext.getEventData().getBodyAsString()); } public static void processError(ErrorContext errorContext) { LOGGER.info("Error occurred in partition processor for partition {}, {}", errorContext.getPartitionContext().getPartitionId(), errorContext.getThrowable()); } }Injektálja a
EventProcessorClientésEventHubProducerClientelemeket a Spring alkalmazásába, ahogy az az alábbi példában látható:import com.azure.messaging.eventhubs.EventData; import com.azure.messaging.eventhubs.EventHubProducerClient; import com.azure.messaging.eventhubs.EventProcessorClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import java.util.Collections; import java.util.concurrent.TimeUnit; @SpringBootApplication public class EventHubClientApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(EventHubClientApplication.class); private final EventHubProducerClient eventHubProducerClient; private final EventProcessorClient eventProcessorClient; public EventHubClientApplication(EventHubProducerClient eventHubProducerClient, EventProcessorClient eventProcessorClient) { this.eventHubProducerClient = eventHubProducerClient; this.eventProcessorClient = eventProcessorClient; } public static void main(String[] args) { SpringApplication.run(EventHubClientApplication.class, args); } @Override public void run(String... args) throws Exception { eventProcessorClient.start(); // Wait for the processor client to be ready TimeUnit.SECONDS.sleep(10); eventHubProducerClient.send(Collections.singletonList(new EventData("Hello World"))); LOGGER.info("Successfully sent a message to Event Hubs."); eventHubProducerClient.close(); LOGGER.info("Stopping and closing the processor"); eventProcessorClient.stop(); } }Indítsa el az alkalmazást. A következő példához hasonló naplók jelennek meg:
Successfully sent a message to Event Hubs. ... Processing event from partition 0 with sequence number 0 with body: Hello World ... Stopping and closing the processor.
Az alábbi listában látható néhány ok, amiért ez a kód nem rugalmas vagy kecses:
- Az Event Hubs-névtér és az eseményközpont neve kódolt.
- Ha a Spring-környezetből szeretne
@Valuekonfigurációkat lekérni, az application.properties fájlban nem szerepelhetnek IDE-tippek. - Ha mikroszolgáltatási forgatókönyve van, minden projektben meg kell duplikálnia a kódot, és könnyen hibázhat, és nehéz konzisztensnek lennie.
Szerencsére a Spring Cloud Azure használatával nem szükséges önállóan felépíteni az ügyfélkomponenseket. Ehelyett közvetlenül injektálhatja őket, és használhatja azokat a konfigurációs tulajdonságokat, amelyeket már ismer a Storage-üzenetsor konfigurálásához. További információ: Spring Cloud Azure konfiguráció.
A Spring Cloud Azure a következő globális konfigurációkat is biztosítja a különböző forgatókönyvekhez. További információért lásd a Spring Cloud Azure konfiguráció című rész Globális konfiguráció Azure Service SDK-khoz szakaszát.
- Proxybeállítások.
- Újrapróbálkozás beállításai.
- AMQP átviteli ügyfél beállításai.
Különböző Azure felhőkhöz is csatlakozhat. További információ: Kapcsolódás különböző Azure felhőkhöz.
Spring Messaging Azure Event Hubs használata
A Spring Messaging Azure Event Hubs modul támogatja Spring Messaging keretrendszert az Event Hubs használatával.
Ha Spring Messaging Azure Event Hubs használ, az alábbi funkciókat használhatja:
-
EventHubsTemplate: Üzenetek küldése Eseményközpontokba aszinkron és szinkron módon. -
@EventHubsListener: Jelöljön meg egy metódust, amely egy Event Hubs-üzenetfigyelő célpontja a célhelyen.
Ez az útmutató bemutatja, hogyan használhatja a Spring Messaging Azure Event Hubs az Event Hubs-üzenetek küldésére és fogadására.
Függőségek hozzáadása
A Spring Messaging Azure Event Hubs modul telepítéséhez adja hozzá a következő függőségeket a pom.xml fájlhoz:
A Spring Cloud Azure Anyagjegyzék (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Feljegyzés
Ha Spring Boot 4.0.x-et használ, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre7.4.0: .Ha a Spring Boot 3.5.x-et használja, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre6.5.0: .Ha a Spring Boot 3.1.x-3.5.x verziót használja, mindenképpen állítsa be a verziót
spring-cloud-azure-dependencies-ra/c1.Ha a Spring Boot 2.x-et használja, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót4.20.0-re.Ezt az anyagjegyzéket (BOM) a
<dependencyManagement>fájl szakaszában kell konfigurálni. Ez biztosítja, hogy minden Spring Cloud-Azure függőség ugyanazt a verziót használja.Az anyagjegyzékhez használt verzióval kapcsolatos további információkért lásd: Melyik verzióját a Spring Cloud Azure-nak érdemes használnom?.
A Spring Cloud Azure starter, Spring Messaging Event Hubs és Azure Event Hubs Checkpoint Store-összetevők:
<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>
Az alkalmazás kódolása üzenetek küldéséhez és fogadásához
Ha üzeneteket szeretne küldeni és fogadni az Event Hubstól, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Az Event Hubs-névtér és a Storage-blob konfigurálásához használja a következő tulajdonságbeállításokat:
spring.cloud.azure.eventhubs.namespace=<your event-hubs-namespace> spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name=<your-storage-account-name> spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name=<your-storage-account-container-name>Hozzon létre egy új
ConsumerServiceJava osztályt az alábbi példában látható módon. Ez az osztály egy üzenet fogadó definiálására szolgál. Ügyeljen arra, hogy a<your-event-hub-name>helyőrzőt a tényleges értékére cserélje le.import com.azure.spring.messaging.eventhubs.implementation.core.annotation.EventHubsListener; import org.springframework.stereotype.Service; @Service public class ConsumerService { private static final String EVENT_HUB_NAME = "<your-event-hub-name>"; private static final String CONSUMER_GROUP = "$DEFAULT"; @EventHubsListener(destination = EVENT_HUB_NAME, group = CONSUMER_GROUP) public void handleMessageFromEventHub(String message) { System.out.printf("New message received: %s%n", message); } }Küldjön egy feladót és egy fogadót, hogy üzeneteket küldjön és fogadjon a Spring használatával, ahogyan az az alábbi példában látható. Ügyeljen arra, hogy a
<your-event-hub-name>helyőrzőt a tényleges értékére cserélje le.import com.azure.spring.messaging.eventhubs.core.EventHubsTemplate; import com.azure.spring.messaging.implementation.annotation.EnableAzureMessaging; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.messaging.support.MessageBuilder; @SpringBootApplication @EnableAzureMessaging public class EventHubMessagingApplication { private static final String EVENT_HUB_NAME = "<your-event-hub-name>"; private static final Logger LOGGER = LoggerFactory.getLogger(EventHubMessagingApplication.class); public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(EventHubMessagingApplication.class); EventHubsTemplate eventHubsTemplate = applicationContext.getBean(EventHubsTemplate.class); LOGGER.info("Sending a message to the Event Hubs."); eventHubsTemplate.sendAsync(EVENT_HUB_NAME, MessageBuilder.withPayload("Hello world").build()).subscribe(); } }Tipp.
Ne felejtse el hozzáadni a
@EnableAzureMessagingannotációt, amely elindítja a@EventHubsListener-el megjelölt metódusok felderítését, és létrehozza az üzenetfigyelő tárolót a háttérben.Indítsa el az alkalmazást. A következő példához hasonló naplók jelennek meg:
Sending a message to the Event Hubs. New message received: Hello world
A Spring Integration Azure Event Hubs használata
Az Azure Event Hubs Spring integrációs modul támogatást nyújt a Spring Integration keretrendszer számára az Event Hubs használatával.
Ha a Spring-alkalmazás Spring Integration üzenetcsatornákat használ, csatornaadapterekkel irányíthatja az üzeneteket az üzenetcsatornák és az Event Hubs között.
A bejövő csatornaadapter üzeneteket továbbít egy eseményközpontból egy üzenetcsatornába. A kimenő csatornaadapter üzeneteket tesz közzé egy üzenetcsatornából egy eseményközpontba.
Ez az útmutató bemutatja, hogyan küldhet üzeneteket az Event Hubsnak a Spring Integration Azure Event Hubs használatával.
Függőségek hozzáadása
A Spring Cloud Azure Event Hubs Integration Starter modul telepítéséhez adja hozzá a következő függőségeket a pom.xml fájlhoz:
A Spring Cloud Azure Anyagjegyzék (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Feljegyzés
Ha Spring Boot 4.0.x-et használ, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre7.4.0: .Ha a Spring Boot 3.5.x-et használja, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre6.5.0: .Ha a Spring Boot 3.1.x-3.5.x verziót használja, mindenképpen állítsa be a verziót
spring-cloud-azure-dependencies-ra/c1.Ha a Spring Boot 2.x-et használja, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót4.20.0-re.Ezt az anyagjegyzéket (BOM) a
<dependencyManagement>fájl szakaszában kell konfigurálni. Ez biztosítja, hogy minden Spring Cloud-Azure függőség ugyanazt a verziót használja.Az anyagjegyzékhez használt verzióval kapcsolatos további információkért lásd: Melyik verzióját a Spring Cloud Azure-nak érdemes használnom?.
A Spring Cloud Azure Event Hubs integrációs összetevő:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-integration-eventhubs</artifactId> </dependency>
Az alkalmazás kódolása üzenetek küldéséhez és fogadásához
Ha üzeneteket szeretne küldeni és fogadni az Event Hubstól, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Az Event Hubs-névtér és a Storage-blob konfigurálásához használja a következő tulajdonságbeállításokat:
spring.cloud.azure.eventhubs.namespace=<your event-hubs-namespace> spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name=<your-storage-account-name> spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name=<your-storage-account-container-name>Hozzon létre egy új
MessageReceiveConfigurationJava osztályt az alábbi példában látható módon. Ez az osztály egy üzenet fogadó definiálására szolgál. Ügyeljen arra, hogy a<your-event-hub-name>helyőrzőt a tényleges értékére cserélje le.import com.azure.spring.integration.eventhubs.inbound.EventHubsInboundChannelAdapter; import com.azure.spring.messaging.eventhubs.core.EventHubsProcessorFactory; import com.azure.spring.messaging.eventhubs.core.checkpoint.CheckpointConfig; import com.azure.spring.messaging.eventhubs.core.checkpoint.CheckpointMode; import com.azure.spring.messaging.eventhubs.core.listener.EventHubsMessageListenerContainer; import com.azure.spring.messaging.eventhubs.core.properties.EventHubsContainerProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.channel.DirectChannel; import org.springframework.messaging.MessageChannel; @Configuration public class MessageReceiveConfiguration { private static final String INPUT_CHANNEL = "input"; private static final String EVENT_HUB_NAME = "<your-event-hub-name>"; private static final String CONSUMER_GROUP = "$Default"; private static final Logger LOGGER = LoggerFactory.getLogger(MessageReceiveConfiguration.class); @ServiceActivator(inputChannel = INPUT_CHANNEL) public void messageReceiver(byte[] payload) { String message = new String(payload); LOGGER.info("New message received: {}", message); } @Bean public EventHubsMessageListenerContainer messageListenerContainer(EventHubsProcessorFactory processorFactory) { EventHubsContainerProperties containerProperties = new EventHubsContainerProperties(); containerProperties.setEventHubName(EVENT_HUB_NAME); containerProperties.setConsumerGroup(CONSUMER_GROUP); containerProperties.setCheckpointConfig(new CheckpointConfig(CheckpointMode.MANUAL)); return new EventHubsMessageListenerContainer(processorFactory, containerProperties); } @Bean public EventHubsInboundChannelAdapter messageChannelAdapter(@Qualifier(INPUT_CHANNEL) MessageChannel inputChannel, EventHubsMessageListenerContainer listenerContainer) { EventHubsInboundChannelAdapter adapter = new EventHubsInboundChannelAdapter(listenerContainer); adapter.setOutputChannel(inputChannel); return adapter; } @Bean public MessageChannel input() { return new DirectChannel(); } }Hozzon létre egy új
MessageSendConfigurationJava osztályt az alábbi példában látható módon. Ez az osztály egy üzenetküldő definiálására szolgál. Ügyeljen arra, hogy a<your-event-hub-name>helyőrzőt a tényleges értékére cserélje le.import com.azure.spring.integration.core.handler.DefaultMessageHandler; import com.azure.spring.messaging.eventhubs.core.EventHubsTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.annotation.MessagingGateway; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.messaging.MessageHandler; import org.springframework.util.concurrent.ListenableFutureCallback; @Configuration public class MessageSendConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(MessageSendConfiguration.class); private static final String OUTPUT_CHANNEL = "output"; private static final String EVENT_HUB_NAME = "<your-event-hub-name>"; @Bean @ServiceActivator(inputChannel = OUTPUT_CHANNEL) public MessageHandler messageSender(EventHubsTemplate eventHubsTemplate) { DefaultMessageHandler handler = new DefaultMessageHandler(EVENT_HUB_NAME, eventHubsTemplate); handler.setSendCallback(new ListenableFutureCallback<Void>() { @Override public void onSuccess(Void result) { LOGGER.info("Message was sent successfully."); } @Override public void onFailure(Throwable ex) { LOGGER.error("There was an error sending the message.", ex); } }); return handler; } @MessagingGateway(defaultRequestChannel = OUTPUT_CHANNEL) public interface EventHubOutboundGateway { void send(String text); } }Küldjön egy feladót és egy fogadót, hogy üzeneteket küldjön és fogadjon a Spring használatával, ahogy az a következő példában látható:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Configuration; import org.springframework.integration.config.EnableIntegration; @SpringBootApplication @EnableIntegration @Configuration(proxyBeanMethods = false) public class EventHubIntegrationApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(EventHubIntegrationApplication.class, args); MessageSendConfiguration.EventHubOutboundGateway outboundGateway = applicationContext.getBean(MessageSendConfiguration.EventHubOutboundGateway.class); outboundGateway.send("Hello World"); } }Tipp.
Ne felejtse el hozzáadni a
@EnableIntegrationmegjegyzést, amely lehetővé teszi a Spring Integration-infrastruktúrát.Indítsa el az alkalmazást. A következő példához hasonló naplók jelennek meg:
Message was sent successfully. New message received: Hello World
A Spring Cloud Azure Stream Event Hubs Binder használata
Az Event Hubs API meghívásához egy Spring Cloud Stream alkalmazásban használja a Spring Cloud Azure Event Hubs Stream Binder modult.
Ez az útmutató bemutatja, hogyan küldhet üzeneteket az Event Hubsnak a Spring Cloud Stream Event Hubs Binder használatával.
Függőségek hozzáadása
A Spring Cloud Azure Event Hubs Stream Binder modul telepítéséhez adja hozzá a következő függőségeket a pom.xml fájlhoz:
A Spring Cloud Azure Anyagjegyzék (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Feljegyzés
Ha Spring Boot 4.0.x-et használ, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre7.4.0: .Ha a Spring Boot 3.5.x-et használja, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre6.5.0: .Ha a Spring Boot 3.1.x-3.5.x verziót használja, mindenképpen állítsa be a verziót
spring-cloud-azure-dependencies-ra/c1.Ha a Spring Boot 2.x-et használja, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót4.20.0-re.Ezt az anyagjegyzéket (BOM) a
<dependencyManagement>fájl szakaszában kell konfigurálni. Ez biztosítja, hogy minden Spring Cloud-Azure függőség ugyanazt a verziót használja.Az anyagjegyzékhez használt verzióval kapcsolatos további információkért lásd: Melyik verzióját a Spring Cloud Azure-nak érdemes használnom?.
A Spring Cloud Azure Event Hubs Stream Binder kötőelem:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-stream-binder-eventhubs</artifactId> </dependency>
Az alkalmazás kódolása üzenetek küldéséhez és fogadásához
Ha üzeneteket szeretne küldeni és fogadni az Event Hubstól, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Az Event Hubs-névtér és a Storage-blob konfigurálásához használja a következő tulajdonságbeállításokat:
spring.cloud.azure.eventhubs.namespace=<your event-hubs-namespace> spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name=<your-storage-account-name> spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name=<your-storage-account-container-name>Hozza létre az üzenet fogadót.
Az alkalmazás eseménygyűjtőként való használatához konfigurálja a bemeneti iratgyűjtőt az alábbi feladatok elvégzésével:
Deklaráljon egy
Consumerbean-t, amely meghatározza az üzenetkezelési logikát. AConsumerbab neve példáulconsume:@Bean public Consumer<Message<String>> consume() { return message -> { System.out.printf("New message received: %s%n", message.getPayload()); }; }Adja hozzá a következő konfigurációt a
Event Hubfogyasztási nevének megadásához. Ügyeljen arra, hogy a<your-event-hub-name>helyőrzőt a tényleges értékére cserélje le.# name for the above `Consumer` bean spring.cloud.stream.function.definition=consume spring.cloud.stream.bindings.consume-in-0.destination=<your-event-hub-name> spring.cloud.stream.bindings.consume-in-0.group=$Default spring.cloud.stream.eventhubs.bindings.consume-in-0.consumer.checkpoint.mode=MANUAL
Hozza létre az üzenet küldőjét.
Az alkalmazás eseményforrásként való használatához konfigurálja a kimeneti kötést a következő feladatok végrehajtásával:
Határozza meg a
Supplierbean-t, amely meghatározza, hogy az üzenetek honnan érkeznek az alkalmazáson belül, ahogyan az alábbi példában látható:@Bean public Supplier<Message<String>> supply() { return () -> { System.out.println("Sending a message."); return MessageBuilder.withPayload("Hello world").build(); }; }Adja hozzá a következő konfigurációt a
Event Hubküldés nevének megadásához. Ügyeljen arra, hogy a<your-event-hub-name>helyőrzőt a tényleges értékére cserélje le.# "consume" is added from the above step spring.cloud.stream.function.definition=consume;supply spring.cloud.stream.bindings.supply-out-0.destination=<your-event-hub-name>
Indítsa el az alkalmazást. A következő példához hasonló naplók jelennek meg:
Sending a message. New message received: Hello world.
Azure Event Hubs használata Spring Kaffkával
Az Event Hubs egy Olyan Kafka-végpontot biztosít, amelyet a meglévő Kafka-alapú alkalmazások használhatnak. Ez a megközelítés alternatívát kínál a saját Kafka-fürt üzemeltetésére. Az Event Hubs számos meglévő Kafka-alkalmazással működik együtt. További információ: Event Hubs for Apache Kafka.
Ez az útmutató bemutatja, hogyan használhatja Azure Event Hubs és Spring Kafka használatával üzeneteket küldeni és fogadni az Event Hubstól.
Függőségek hozzáadása
A Spring Cloud Azure starter- és Spring Kafka-modulok telepítéséhez adja hozzá a következő függőségeket a pom.xml fájlhoz:
A Spring Cloud Azure Anyagjegyzék (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Feljegyzés
Ha Spring Boot 4.0.x-et használ, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre7.4.0: .Ha a Spring Boot 3.5.x-et használja, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre6.5.0: .Ha a Spring Boot 3.1.x-3.5.x verziót használja, mindenképpen állítsa be a verziót
spring-cloud-azure-dependencies-ra/c1.Ha a Spring Boot 2.x-et használja, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót4.20.0-re.Ezt az anyagjegyzéket (BOM) a
<dependencyManagement>fájl szakaszában kell konfigurálni. Ez biztosítja, hogy minden Spring Cloud-Azure függőség ugyanazt a verziót használja.Az anyagjegyzékhez használt verzióval kapcsolatos további információkért lásd: Melyik verzióját a Spring Cloud Azure-nak érdemes használnom?.
A Spring Cloud Azure starter és a Spring Kafka összetevő:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency>
Az alkalmazás kódolása üzenetek küldéséhez és fogadásához
Ha üzeneteket szeretne küldeni és fogadni az Event Hubstól, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Az Event Hubs-névtér konfigurálásához használja a következő tulajdonságbeállítást:
spring.kafka.bootstrap-servers=<your event-hubs-namespace>.servicebus.windows.net:9093Az
KafkaTemplatealábbi példában látható módon üzeneteket küldhet és@KafkaListenerfogadhat. Ügyeljen arra, hogy a<your-event-hub-name>helyőrzőt a tényleges értékére cserélje le.import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; @SpringBootApplication public class EventHubKafkaApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(EventHubKafkaApplication.class); private static final String EVENT_HUB_NAME = "<your-event-hub-name>"; private static final String CONSUMER_GROUP = "$Default"; private final KafkaTemplate<String, String> kafkaTemplate; public EventHubKafkaApplication(KafkaTemplate<String, String> kafkaTemplate) { this.kafkaTemplate = kafkaTemplate; } public static void main(String[] args) { SpringApplication.run(EventHubKafkaApplication.class, args); } @Override public void run(String... args) { kafkaTemplate.send(EVENT_HUB_NAME, "Hello World"); LOGGER.info("Message was sent successfully."); } @KafkaListener(topics = EVENT_HUB_NAME, groupId = CONSUMER_GROUP) public void receive(String message) { LOGGER.info("New message received: {}", message); } }Indítsa el az alkalmazást. A következő példához hasonló naplók jelennek meg:
Message was sent successfully. New message received: Hello world
A Spring Cloud Stream Kafka Binder használata Azure Event Hubs
A Spring Cloud Stream egy keretrendszer, amely lehetővé teszi az alkalmazásfejlesztők számára az üzenetvezérelt mikroszolgáltatások írását. Az üzenetkezelési rendszer és a Spring Cloud Stream közötti híd a binderek absztrakcióján keresztül történik. A binderek számos üzenetkezelési rendszerhez léteznek, de az egyik leggyakrabban használt kötés az Apache Kafka.
Ez az útmutató bemutatja, hogyan használhatja Azure Event Hubs és Spring Cloud Stream Kafka Binder használatával üzeneteket küldhet az Event Hubsnak, és fogadhat üzeneteket.
Függőségek hozzáadása
A Spring Cloud Azure kezdő- és Spring Cloud Stream kötőanyag Kafka-moduljainak telepítéséhez adja hozzá a következő függőségeket a pom.xml fájlhoz:
A Spring Cloud Azure Anyagjegyzék (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Feljegyzés
Ha Spring Boot 4.0.x-et használ, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre7.4.0: .Ha a Spring Boot 3.5.x-et használja, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre6.5.0: .Ha a Spring Boot 3.1.x-3.5.x verziót használja, mindenképpen állítsa be a verziót
spring-cloud-azure-dependencies-ra/c1.Ha a Spring Boot 2.x-et használja, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót4.20.0-re.Ezt az anyagjegyzéket (BOM) a
<dependencyManagement>fájl szakaszában kell konfigurálni. Ez biztosítja, hogy minden Spring Cloud-Azure függőség ugyanazt a verziót használja.Az anyagjegyzékhez használt verzióval kapcsolatos további információkért lásd: Melyik verzióját a Spring Cloud Azure-nak érdemes használnom?.
A Spring Cloud Azure kezdő összetevő:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-kafka</artifactId> </dependency>
Az alkalmazás kódolása üzenetek küldéséhez és fogadásához
Ha üzeneteket szeretne küldeni és fogadni az Event Hubstól, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
A Kafka-közvetítő konfigurálásához használja a következő tulajdonságbeállítást:
spring.cloud.stream.kafka.binder.brokers=<your event-hubs-namespace>.servicebus.windows.net:9093Hozza létre az üzenet fogadót.
Az alkalmazás eseménygyűjtőként való használatához konfigurálja a bemeneti iratgyűjtőt az alábbi feladatok elvégzésével:
Deklaráljon egy
Consumerbean-t, amely meghatározza az üzenetkezelési logikát. AConsumerbab neve példáulconsume:@Bean public Consumer<Message<String>> consume() { return message -> { System.out.printf("New message received: %s%n", message.getPayload()); }; }Adja hozzá a következő konfigurációt a
Event Hubfogyasztási nevének megadásához. Ügyeljen arra, hogy a<your-event-hub-name>helyőrzőt a tényleges értékére cserélje le.# name for the above `Consumer` bean spring.cloud.stream.function.definition=consume spring.cloud.stream.bindings.consume-in-0.destination=<your-event-hub-name> spring.cloud.stream.bindings.consume-in-0.group=$Default
Hozza létre az üzenet küldőjét.
Az alkalmazás eseményforrásként való használatához konfigurálja a kimeneti kötést a következő feladatok végrehajtásával:
Határozza meg a
Supplierbean-t, amely meghatározza, hogy az üzenetek honnan érkeznek az alkalmazáson belül, ahogyan az alábbi példában látható:@Bean public Supplier<Message<String>> supply() { return () -> { System.out.println("Sending a message."); return MessageBuilder.withPayload("Hello world").build(); }; }Adja hozzá a következő konfigurációt a
Event Hubküldés nevének megadásához. Ügyeljen arra, hogy a<your-event-hub-name>helyőrzőt a tényleges értékére cserélje le.# "consume" is added from the above step spring.cloud.stream.function.definition=consume;supply spring.cloud.stream.bindings.supply-out-0.destination=<your-event-hub-name>
Indítsa el az alkalmazást. A következő példához hasonló naplók jelennek meg:
Sending a message. New message received: Hello world.
Üzembe helyezés a Azure Spring Apps
Most, hogy a Spring Boot-alkalmazás helyileg fut, ideje éles környezetbe átvinni. Azure Spring Apps megkönnyíti a Spring Boot-alkalmazások Azure való üzembe helyezését kódmódosítások nélkül. A szolgáltatás kezeli a Spring-alkalmazások infrastruktúráját, hogy a fejlesztők a kódjukra összpontosíthassanak. Azure Spring Apps teljes körű monitorozás és diagnosztika, konfigurációkezelés, szolgáltatásfelderítés, CI/CD-integráció, kék-zöld környezetek és egyebek használatával biztosítja az életciklus-felügyeletet. Az alkalmazás Azure Spring Apps való üzembe helyezéséről a A Azure Spring Apps első alkalmazás üzembe helyezéséről szóló cikkben olvashat.
Következő lépések
Lásd még
További információ a Microsoft Azure elérhető többi Spring Boot Starterről: Mi a Spring Cloud Azure?