Spring Cloud Stream az Azure Event Hubsszal
Ez az oktatóanyag bemutatja, hogyan küldhet és fogadhat üzeneteket az Azure Event Hubs és a Spring Cloud Stream Binder EventHubs használatával spring boot-alkalmazásokban.
Előfeltételek
Azure-előfizetés – hozzon létre egyet ingyenesen.
A Java Development Kit (JDK) 8- vagy újabb verziója.
Apache Maven, 3.2-es vagy újabb verzió.
cURL vagy hasonló HTTP-segédprogram a funkciók teszteléséhez.
Egy Azure Event Hub. Ha nincs ilyenje, hozzon létre egy eseményközpontot az Azure Portal használatával.
Egy Azure Storage-fiók az Event Hub ellenőrzőpontjaihoz. Ha nem rendelkezik ilyen fiókkal, hozzon létre egy tárfiókot.
Egy Spring Boot-alkalmazás. Ha nem rendelkezik ilyennel, hozzon létre egy Maven-projektet a Spring Initializrrel. Mindenképpen válassza a Maven Projectet, és a Függőségek területen adja hozzá a Spring Web és az Azure támogatási függőségeit, majd válassza a Java 8-es vagy újabb verzióját.
Feljegyzés
Ha hozzáférést szeretne adni a fiókjának az erőforrásokhoz, az Azure Event Hubsban rendelje hozzá a Azure Event Hubs Data Receiver
jelenleg használt Microsoft Entra-fiókhoz és Azure Event Hubs Data Sender
szerepkörhöz. Ezután az Azure Storage-fiókban rendelje hozzá a Storage Blob Data Contributor
szerepkört a jelenleg használt Microsoft Entra-fiókhoz. További információ a hozzáférési szerepkörök megadásáról: Azure-szerepkörök hozzárendelése az Azure Portal használatával és Az Event Hubs-erőforrásokhoz való hozzáférés engedélyezése a 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.
Üzenetek küldése és fogadása az Azure Event Hubsból
Egy Azure Storage-fiókkal és egy Azure Event Hubbal üzeneteket küldhet és fogadhat a Spring Cloud Azure Stream Binder Event Hubs használatával.
A Spring Cloud Azure Stream Binder 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éke (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.18.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Feljegyzés
Ha Spring Boot 2.x-et használ, mindenképpen állítsa be a verziót
4.19.0
.spring-cloud-azure-dependencies
Ezt az anyagjegyzéket (BOM) a<dependencyManagement>
pom.xml 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. A BOM-hez használt verzióról további információt a Spring Cloud Azure melyik verzióját érdemes használni.A Spring Cloud Azure Stream Binder Event Hubs-összetevő:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-stream-binder-eventhubs</artifactId> </dependency>
Az alkalmazás kódolása
Az alábbi lépésekkel konfigurálhatja az alkalmazást üzenetek előállítására és felhasználására az Azure Event Hubs használatával.
Az Event Hub hitelesítő adatainak konfigurálásához adja hozzá az alábbi tulajdonságokat az application.properties fájlhoz .
spring.cloud.azure.eventhubs.namespace=${AZURE_EVENTHUBS_NAMESPACE} spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name=${AZURE_STORAGE_ACCOUNT_NAME} spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name=${AZURE_STORAGE_CONTAINER_NAME} spring.cloud.stream.bindings.consume-in-0.destination=${AZURE_EVENTHUB_NAME} spring.cloud.stream.bindings.consume-in-0.group=${AZURE_EVENTHUB_CONSUMER_GROUP} spring.cloud.stream.bindings.supply-out-0.destination=${AZURE_EVENTHUB_NAME} spring.cloud.stream.eventhubs.bindings.consume-in-0.consumer.checkpoint.mode=MANUAL spring.cloud.function.definition=consume;supply; spring.cloud.stream.poller.initial-delay=0 spring.cloud.stream.poller.fixed-delay=1000
Az alábbi táblázat a konfiguráció mezőit ismerteti:
Mező Leírás spring.cloud.azure.eventhubs.namespace
Adja meg az eseményközpontban az Azure Portalról beszerzett névteret. spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name
Adja meg az oktatóanyagban létrehozott tárfiókot. spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name
Adja meg a tárfiók tárolóját. spring.cloud.stream.bindings.consume-in-0.destination
Adja meg az oktatóanyagban használt eseményközpontot. spring.cloud.stream.bindings.consume-in-0.group
Adja meg a fogyasztói csoportokat az Event Hubs-példányban. spring.cloud.stream.bindings.supply-out-0.destination
Adja meg ugyanazt az eseményközpontot, amelyet ebben az oktatóanyagban használt. spring.cloud.stream.eventhubs.bindings.consume-in-0.consumer.checkpoint.mode
Adja meg a következőt: MANUAL
.spring.cloud.function.definition
Adja meg, hogy melyik funkcionális babot kell a kötések által közzétett külső célhelyhez kötni. spring.cloud.stream.poller.initial-delay
Adja meg a rendszeres eseményindítók kezdeti késleltetését. Az alapértelmezett érték 0. spring.cloud.stream.poller.fixed-delay
Adja meg az alapértelmezett poller rögzített késleltetését ezredmásodpercben. Az alapértelmezett érték 1000 L. Szerkessze az indítási osztályfájlt a következő tartalom megjelenítéséhez.
import com.azure.spring.messaging.checkpoint.Checkpointer; import com.azure.spring.messaging.eventhubs.support.EventHubsHeaders; 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.context.annotation.Bean; import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; import reactor.core.publisher.Flux; import reactor.core.publisher.Sinks; import java.util.function.Consumer; import java.util.function.Supplier; import static com.azure.spring.messaging.AzureHeaders.CHECKPOINTER; @SpringBootApplication public class EventHubBinderApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(EventHubBinderApplication.class); private static final Sinks.Many<Message<String>> many = Sinks.many().unicast().onBackpressureBuffer(); public static void main(String[] args) { SpringApplication.run(EventHubBinderApplication.class, args); } @Bean public Supplier<Flux<Message<String>>> supply() { return ()->many.asFlux() .doOnNext(m->LOGGER.info("Manually sending message {}", m)) .doOnError(t->LOGGER.error("Error encountered", t)); } @Bean public Consumer<Message<String>> consume() { return message->{ Checkpointer checkpointer = (Checkpointer) message.getHeaders().get(CHECKPOINTER); LOGGER.info("New message received: '{}', partition key: {}, sequence number: {}, offset: {}, enqueued " +"time: {}", message.getPayload(), message.getHeaders().get(EventHubsHeaders.PARTITION_KEY), message.getHeaders().get(EventHubsHeaders.SEQUENCE_NUMBER), message.getHeaders().get(EventHubsHeaders.OFFSET), message.getHeaders().get(EventHubsHeaders.ENQUEUED_TIME) ); checkpointer.success() .doOnSuccess(success->LOGGER.info("Message '{}' successfully checkpointed", message.getPayload())) .doOnError(error->LOGGER.error("Exception found", error)) .block(); }; } @Override public void run(String... args) { LOGGER.info("Going to add message {} to sendMessage.", "Hello World"); many.emitNext(MessageBuilder.withPayload("Hello World").build(), Sinks.EmitFailureHandler.FAIL_FAST); } }
Tipp.
Ebben az oktatóanyagban nincsenek hitelesítési műveletek a konfigurációkban vagy a kódban. Az Azure-szolgáltatásokhoz való csatlakozáshoz azonban hitelesítés szükséges. A hitelesítés befejezéséhez az Azure Identity-et kell használnia. A Spring Cloud Azure
DefaultAzureCredential
az Azure Identity-kódtár használatával segít a hitelesítő adatok kódmódosítások nélküli beszerzésében.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 és éles környezetekben) környezetspecifikus kód implementálása nélkül. További információ: DefaultAzureCredential.A helyi fejlesztési környezetekben a hitelesítés befejezéséhez használhatja az Azure CLI-t, a Visual Studio Code-ot, a PowerShellt vagy más módszereket. További információ: Azure-hitelesítés Java-fejlesztési környezetekben. A hitelesítés azure-beli üzemeltetési környezetekben való elvégzéséhez javasoljuk a felhasználó által hozzárendelt felügyelt identitás használatát. További információ: Mik az Azure-erőforrások felügyelt identitásai?
Indítsa el az alkalmazást. Az ilyen üzenetek megjelennek az alkalmazásnaplóban, ahogy az alábbi példakimenetben is látható:
New message received: 'Hello World', partition key: 107207233, sequence number: 458, offset: 94256, enqueued time: 2023-02-17T08:27:59.641Z Message 'Hello World!' successfully checkpointed
Üzembe helyezés az Azure Spring Appsben
Most, hogy a Spring Boot-alkalmazás helyileg fut, ideje éles környezetbe áthelyezni. Az Azure Spring Apps megkönnyíti a Spring Boot-alkalmazások üzembe helyezését az Azure-ban 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. Az Azure Spring Apps átfogó monitorozási és diagnosztikai, konfigurációkezelési, szolgáltatásfelderítési, CI/CD-integrációs, kék-zöld környezetek és egyebek használatával biztosítja az életciklus-felügyeletet. Az alkalmazás Azure Spring Appsben való üzembe helyezéséről az első alkalmazás üzembe helyezése az Azure Spring Appsben című témakörben olvashat.