Använda Spring Kafka med Azure Event Hubs för Kafka API
Den här självstudien visar hur du konfigurerar en Java-baserad Spring Cloud Stream Binder för att använda Azure Event Hubs för Kafka för att skicka och ta emot meddelanden med Azure Event Hubs. Mer information finns i Använda Azure Event Hubs från Apache Kafka-program
I den här självstudien ska vi inkludera två autentiseringsmetoder: Microsoft Entra-autentisering och SAS-autentisering (Signatur för delad åtkomst). Fliken Lösenordslös visar Microsoft Entra-autentiseringen och fliken Anslutningssträng visar SAS-autentiseringen.
Microsoft Entra-autentisering är en mekanism för att ansluta till Azure Event Hubs för Kafka med hjälp av identiteter som definierats i Microsoft Entra-ID. Med Microsoft Entra-autentisering kan du hantera databasanvändares identiteter och andra Microsoft-tjänster på en central plats, vilket förenklar behörighetshanteringen.
SAS-autentisering använder anslutningssträng för ditt Azure Event Hubs-namnområde för delegerad åtkomst till Event Hubs för Kafka. Om du väljer att använda signaturer för delad åtkomst som autentiseringsuppgifter måste du hantera anslutningssträng själv.
Förutsättningar
En Azure-prenumeration – skapa en kostnadsfritt.
Java Development Kit (JDK) version 8 eller senare.
Apache Maven, version 3.2 eller senare.
cURL eller ett liknande HTTP-verktyg för att testa funktioner.
Azure Cloud Shell eller Azure CLI 2.37.0 eller senare.
En Azure Event Hub. Om du inte har en skapar du en händelsehubb med Azure Portal.
Ett Spring Boot-program. Om du inte har ett skapar du ett Maven-projekt med Spring Initializr. Se till att välja Maven Project och under Beroenden lägger du till Spring Web, Spring för Apache Kafka och Cloud Stream-beroenden och väljer sedan Java version 8 eller senare.
Viktigt!
Spring Boot version 2.5 eller senare krävs för att slutföra stegen i den här självstudien.
Förbereda autentiseringsuppgifter
Azure Event Hubs stöder användning av Microsoft Entra-ID för att auktorisera begäranden till Event Hubs-resurser. Med Microsoft Entra-ID kan du använda rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att bevilja behörigheter till ett säkerhetsobjekt, som kan vara en användare eller ett huvudnamn för programtjänsten.
Om du vill köra det här exemplet lokalt med Microsoft Entra-autentisering kontrollerar du att ditt användarkonto har autentiserats via Azure Toolkit for IntelliJ, Plugin-programmet Visual Studio Code Azure-konto eller Azure CLI. Kontrollera också att kontot har beviljats tillräckliga behörigheter.
Kommentar
När du använder lösenordslösa anslutningar måste du ge ditt konto åtkomst till resurser. I Azure Event Hubs tilldelar du Azure Event Hubs Data Receiver
rollen och Azure Event Hubs Data Sender
till det Microsoft Entra-konto som du använder för närvarande. Mer information om hur du beviljar åtkomstroller finns i Tilldela Azure-roller med hjälp av Azure Portal och Auktorisera åtkomst till Event Hubs-resurser med hjälp av Microsoft Entra-ID.
Skicka och ta emot meddelanden från Azure Event Hubs
Med en Azure Event Hub kan du skicka och ta emot meddelanden med Spring Cloud Azure.
Om du vill installera Spring Cloud Azure Starter-modulen lägger du till följande beroenden i din pom.xml-fil :
Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Kommentar
Om du använder Spring Boot 2.x måste du ange
spring-cloud-azure-dependencies
versionen till4.19.0
. Den här strukturlistan (BOM) bör konfigureras i avsnittet i<dependencyManagement>
din pom.xml-fil . Detta säkerställer att alla Spring Cloud Azure-beroenden använder samma version. Mer information om vilken version som används för den här strukturlistan finns i Vilken version av Spring Cloud Azure ska jag använda.Spring Cloud Azure Starter-artefakten:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency>
Koda appen
Använd följande steg för att konfigurera ditt program för att producera och använda meddelanden med Hjälp av Azure Event Hubs.
Konfigurera autentiseringsuppgifterna för händelsehubben genom att lägga till följande egenskaper i filen application.properties .
spring.cloud.stream.kafka.binder.brokers=${AZ_EVENTHUBS_NAMESPACE_NAME}.servicebus.windows.net:9093 spring.cloud.function.definition=consume;supply spring.cloud.stream.bindings.consume-in-0.destination=${AZ_EVENTHUB_NAME} spring.cloud.stream.bindings.consume-in-0.group=$Default spring.cloud.stream.bindings.supply-out-0.destination=${AZ_EVENTHUB_NAME}
Dricks
Om du använder version
spring-cloud-azure-dependencies:4.3.0
bör du lägga till egenskapenspring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources
med värdetcom.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration
.Eftersom
4.4.0
läggs den här egenskapen till automatiskt, så du behöver inte lägga till den manuellt.I följande tabell beskrivs fälten i konfigurationen:
Fält beskrivning spring.cloud.stream.kafka.binder.brokers
Anger Azure Event Hubs-slutpunkten. spring.cloud.stream.bindings.consume-in-0.destination
Anger händelsehubben för indatamål, som för den här självstudien är den hubb som du skapade tidigare. spring.cloud.stream.bindings.consume-in-0.group
Anger en konsumentgrupp från Azure Event Hubs, som du kan ange till $Default
för att använda den grundläggande konsumentgrupp som skapades när du skapade din Azure Event Hubs-instans.spring.cloud.stream.bindings.supply-out-0.destination
Anger händelsehubben för utdatamål, som för den här självstudien är samma som indatamålet. Kommentar
Om du aktiverar automatisk skapande av ämne måste du lägga till konfigurationsobjektet
spring.cloud.stream.kafka.binder.replicationFactor
, med värdet inställt på minst 1. Mer information finns i Referensguide för Spring Cloud Stream Kafka Binder.Redigera startklassfilen för att visa följande innehåll.
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.GenericMessage; import reactor.core.publisher.Flux; import reactor.core.publisher.Sinks; import java.util.function.Consumer; import java.util.function.Supplier; @SpringBootApplication public class EventHubKafkaBinderApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(EventHubKafkaBinderApplication.class); private static final Sinks.Many<Message<String>> many = Sinks.many().unicast().onBackpressureBuffer(); public static void main(String[] args) { SpringApplication.run(EventHubKafkaBinderApplication.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->LOGGER.info("New message received: '{}'", message.getPayload()); } @Override public void run(String... args) { many.emitNext(new GenericMessage<>("Hello World"), Sinks.EmitFailureHandler.FAIL_FAST); } }
Dricks
I den här självstudien finns det inga autentiseringsåtgärder i konfigurationerna eller koden. Att ansluta till Azure-tjänster kräver dock autentisering. För att slutföra autentiseringen måste du använda Azure Identity. Spring Cloud Azure använder
DefaultAzureCredential
, som Azure Identity-biblioteket tillhandahåller för att hjälpa dig att få autentiseringsuppgifter utan några kodändringar.DefaultAzureCredential
stöder flera autentiseringsmetoder och avgör vilken metod som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (till exempel lokala miljöer och produktionsmiljöer) utan att implementera miljöspecifik kod. Mer information finns i DefaultAzureCredential.För att slutföra autentiseringen i lokala utvecklingsmiljöer kan du använda Azure CLI, Visual Studio Code, PowerShell eller andra metoder. Mer information finns i Azure-autentisering i Java-utvecklingsmiljöer. För att slutföra autentiseringen i Azure-värdmiljöer rekommenderar vi att du använder användartilldelad hanterad identitet. Mer information finns i Vad är hanterade identiteter för Azure-resurser?
Starta programmet. Meddelanden som i följande exempel publiceras i programloggen:
Kafka version: 3.0.1 Kafka commitId: 62abe01bee039651 Kafka startTimeMs: 1622616433956 New message received: 'Hello World'
Distribuera till Azure Spring Apps
Nu när Spring Boot-programmet körs lokalt är det dags att flytta det till produktion. Azure Spring Apps gör det enkelt att distribuera Spring Boot-program till Azure utan några kodändringar. Tjänsten hanterar infrastrukturen för Spring-program så att utvecklare kan fokusera på sin kod. Azure Spring Apps tillhandahåller livscykelhantering med omfattande övervakning och diagnostik, konfigurationshantering, tjänstidentifiering, CI/CD-integrering, blågröna distributioner med mera. Information om hur du distribuerar ditt program till Azure Spring Apps finns i Distribuera ditt första program till Azure Spring Apps.