Spring Cloud Stream met Azure Event Hubs
Deze zelfstudie laat zien hoe u berichten verzendt en ontvangt met behulp van Azure Event Hubs en Spring Cloud Stream Binder EventHubs in een Spring Boot-toepassing.
Vereisten
Een Azure-abonnement (u kunt een gratis abonnement maken).
Java Development Kit (JDK) versie 8 of hoger.
Apache Maven, versie 3.2 of hoger.
cURL of een vergelijkbaar HTTP-hulpprogramma om de functionaliteit te testen.
Een Azure Event Hub. Als u er nog geen hebt, maakt u een Event Hub met behulp van Azure Portal.
Een Azure Storage-account voor Event Hub-controlepunten. Als u er nog geen hebt, maakt u een opslagaccount.
Een Spring Boot-toepassing. Als u er nog geen hebt, maakt u een Maven-project met de Spring Initializr. Zorg ervoor dat u Maven-project selecteert en voeg onder Afhankelijkheden de afhankelijkheden van Spring Web en Azure Support toe en selecteer vervolgens Java-versie 8 of hoger.
Notitie
Als u uw account toegang wilt verlenen tot resources, wijst u in Azure Event Hubs de Azure Event Hubs Data Receiver
en Azure Event Hubs Data Sender
rol toe aan het Microsoft Entra-account dat u momenteel gebruikt. Wijs vervolgens in het Azure Storage-account de Storage Blob Data Contributor
rol toe aan het Microsoft Entra-account dat u momenteel gebruikt. Zie Azure-rollen toewijzen met behulp van Azure Portal en Toegang tot Event Hubs-resources autoriseren met behulp van Microsoft Entra ID voor meer informatie over het verlenen van toegangsrollen.
Belangrijk
Spring Boot versie 2.5 of hoger is vereist om de stappen in deze zelfstudie uit te voeren.
Berichten verzenden en ontvangen van Azure Event Hubs
Met een Azure Storage-account en een Azure Event Hub kunt u berichten verzenden en ontvangen met behulp van Spring Cloud Azure Stream Binder Event Hubs.
Als u de Spring Cloud Azure Stream Binder Event Hubs-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :
De Spring Cloud Azure Bill of Materials (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>
Notitie
Als u Spring Boot 2.x gebruikt, moet u de
spring-cloud-azure-dependencies
versie instellen op4.19.0
. Deze stuklijst (Bill of Material) moet worden geconfigureerd in de<dependencyManagement>
sectie van uw pom.xml-bestand . Dit zorgt ervoor dat alle Spring Cloud Azure-afhankelijkheden dezelfde versie gebruiken. Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.Het Event Hubs-artefact van Spring Cloud Azure Stream Binder:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-stream-binder-eventhubs</artifactId> </dependency>
De toepassing coderen
Gebruik de volgende stappen om uw toepassing te configureren voor het produceren en gebruiken van berichten met behulp van Azure Event Hubs.
Configureer de Event Hub-referenties door de volgende eigenschappen toe te voegen aan het bestand application.properties .
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
In de volgende tabel worden de velden in de configuratie beschreven:
Veld Beschrijving spring.cloud.azure.eventhubs.namespace
Geef de naamruimte op die u hebt verkregen in uw Event Hub vanuit Azure Portal. spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name
Geef het opslagaccount op dat u in deze zelfstudie hebt gemaakt. spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name
Geef de container van uw opslagaccount op. spring.cloud.stream.bindings.consume-in-0.destination
Geef de Event Hub op die u in deze zelfstudie hebt gebruikt. spring.cloud.stream.bindings.consume-in-0.group
Geef de consumentengroepen op in uw Event Hubs-exemplaar. spring.cloud.stream.bindings.supply-out-0.destination
Geef dezelfde Event Hub op die u in deze zelfstudie hebt gebruikt. spring.cloud.stream.eventhubs.bindings.consume-in-0.consumer.checkpoint.mode
Geef MANUAL
op.spring.cloud.function.definition
Geef op welke functionele bean moet worden verbonden met de externe bestemmingen die door de bindingen worden weergegeven. spring.cloud.stream.poller.initial-delay
Geef de initiƫle vertraging op voor periodieke triggers. De standaardwaarde is 0. spring.cloud.stream.poller.fixed-delay
Geef een vaste vertraging op voor de standaard poller in milliseconden. De standaardwaarde is 1000 L. Bewerk het opstartklassebestand om de volgende inhoud weer te geven.
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); } }
Tip
In deze zelfstudie zijn er geen verificatiebewerkingen in de configuraties of de code. Voor het maken van verbinding met Azure-services is echter verificatie vereist. Als u de verificatie wilt voltooien, moet u Azure Identity gebruiken. Spring Cloud Azure maakt gebruik
DefaultAzureCredential
van, die de Azure Identity-bibliotheek biedt om u te helpen referenties op te halen zonder dat er codewijzigingen zijn aangebracht.DefaultAzureCredential
ondersteunt meerdere verificatiemethoden en bepaalt welke methode tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (zoals lokale en productieomgevingen) zonder omgevingsspecifieke code te implementeren. Zie DefaultAzureCredential voor meer informatie.Als u de verificatie in lokale ontwikkelomgevingen wilt voltooien, kunt u Azure CLI, Visual Studio Code, PowerShell of andere methoden gebruiken. Zie Azure-verificatie in Java-ontwikkelomgevingen voor meer informatie. Als u de verificatie in Azure-hostingomgevingen wilt voltooien, raden we u aan om een door de gebruiker toegewezen beheerde identiteit te gebruiken. Zie Wat zijn beheerde identiteiten voor Azure-resources? voor meer informatie.
Start de toepassing. Berichten zoals deze worden in uw toepassingslogboek geplaatst, zoals wordt weergegeven in de volgende voorbeelduitvoer:
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
Implementeren in Azure Spring Apps
Nu de Spring Boot-toepassing lokaal wordt uitgevoerd, is het tijd om deze naar productie te verplaatsen. Met Azure Spring Apps kunt u Eenvoudig Spring Boot-toepassingen implementeren in Azure zonder codewijzigingen. De service beheert de infrastructuur van Spring-toepassingen, zodat ontwikkelaars zich kunnen richten op hun code. Azure Spring Apps biedt levenscyclusbeheer met uitgebreide bewaking en diagnose, configuratiebeheer, servicedetectie, CI/CD-integratie, blauwgroene implementaties en meer. Zie Uw eerste toepassing implementeren in Azure Spring Apps om uw toepassing te implementeren in Azure Spring Apps.