Použití Spring Kafka se službou Azure Event Hubs pro rozhraní Kafka API

V tomto kurzu se dozvíte, jak nakonfigurovat Spring Cloud Stream Binder založený na Javě tak, aby používal službu Azure Event Hubs pro Kafka k odesílání a přijímání zpráv pomocí služby Azure Event Hubs. Další informace najdete v tématu Použití služby Azure Event Hubs z aplikací Apache Kafka.

V tomto kurzu budeme zahrnovat dvě metody ověřování: ověřování Microsoft Entra a ověřování sdíleného přístupového podpisu (SAS). Karta Bez hesla zobrazuje ověřování Microsoft Entra a karta Připojovací řetězec zobrazuje ověřování SAS.

Ověřování Microsoft Entra je mechanismus pro připojení ke službě Azure Event Hubs pro Kafka pomocí identit definovaných v Microsoft Entra ID. Pomocí ověřování Microsoft Entra můžete spravovat identity uživatelů databáze a další služby Microsoft v centrálním umístění, což zjednodušuje správu oprávnění.

Ověřování SAS používá připojovací řetězec vašeho oboru názvů služby Azure Event Hubs pro delegovaný přístup ke službě Event Hubs pro Kafka. Pokud se rozhodnete používat sdílené přístupové podpisy jako přihlašovací údaje, musíte spravovat připojovací řetězec sami.

Požadavky

Důležité

K dokončení kroků v tomto kurzu se vyžaduje Spring Boot verze 2.5 nebo vyšší.

Příprava přihlašovacích údajů

Azure Event Hubs podporuje použití ID Microsoft Entra k autorizaci požadavků na prostředky služby Event Hubs. S ID Microsoft Entra můžete pomocí řízení přístupu na základě role v Azure (Azure RBAC) udělit oprávnění k objektu zabezpečení, což může být uživatel nebo instanční objekt aplikace.

Pokud chcete tuto ukázku spustit místně s ověřováním Microsoft Entra, ujistěte se, že se váš uživatelský účet ověřil prostřednictvím sady Azure Toolkit for IntelliJ, modulu plug-in účtu Azure Pro Visual Studio Code nebo Azure CLI. Také se ujistěte, že účet má dostatečná oprávnění.

Poznámka:

Pokud používáte připojení bez hesla, musíte účtu udělit přístup k prostředkům. Ve službě Azure Event Hubs přiřaďte Azure Event Hubs Data Receiver tuto roli Azure Event Hubs Data Sender účtu Microsoft Entra, který aktuálně používáte. Další informace o udělení přístupových rolí najdete v tématu Přiřazení rolí Azure pomocí webu Azure Portal a autorizace přístupu k prostředkům služby Event Hubs pomocí ID Microsoft Entra.

Odesílání a příjem zpráv ze služby Azure Event Hubs

S centrem událostí Azure můžete odesílat a přijímat zprávy pomocí Spring Cloudu Azure.

Pokud chcete nainstalovat modul Spring Cloud Azure Starter, přidejte do souboru pom.xml následující závislosti:

  • Kusovník materiálů (BOM) Spring Cloud v Azure:

    <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>
    

    Poznámka:

    Pokud používáte Spring Boot 2.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 4.19.0. Tato faktura materiálu (BOM) by měla být nakonfigurována v <dependencyManagement> části vašeho pom.xml souboru. Tím se zajistí, že všechny závislosti Azure Spring Cloudu budou používat stejnou verzi. Další informace o verzi použité pro tuto kusovníku najdete v tématu Jakou verzi Spring Cloud Azure mám použít.

  • Artefakt Spring Cloud Azure Starter:

    <dependency>
       <groupId>com.azure.spring</groupId>
       <artifactId>spring-cloud-azure-starter</artifactId>
    </dependency>
    

Vytvoření kódu aplikace

Pomocí následujících kroků nakonfigurujte aplikaci tak, aby vytvářela a využívala zprávy pomocí služby Azure Event Hubs.

  1. Nakonfigurujte přihlašovací údaje centra událostí přidáním následujících vlastností do souboru 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}
    

    Tip

    Pokud používáte verzi spring-cloud-azure-dependencies:4.3.0, měli byste přidat vlastnost spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources s hodnotou com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration.

    Vzhledem k tomu 4.4.0, že se tato vlastnost přidá automaticky, takže ji nemusíte přidávat ručně.

    Následující tabulka popisuje pole v konfiguraci:

    Pole Popis
    spring.cloud.stream.kafka.binder.brokers Určuje koncový bod služby Azure Event Hubs.
    spring.cloud.stream.bindings.consume-in-0.destination Určuje vstupní cílové centrum událostí, které je pro účely tohoto kurzu centrem, které jste vytvořili dříve.
    spring.cloud.stream.bindings.consume-in-0.group Určuje skupinu příjemců ze služby Azure Event Hubs, na kterou můžete nastavit $Default , aby se použila základní skupina příjemců vytvořená při vytváření instance služby Azure Event Hubs.
    spring.cloud.stream.bindings.supply-out-0.destination Určuje výstupní cílové centrum událostí, které je pro účely tohoto kurzu stejné jako vstupní cíl.

    Poznámka:

    Pokud povolíte automatické vytvoření tématu, nezapomeňte přidat položku spring.cloud.stream.kafka.binder.replicationFactorkonfigurace s hodnotou nastavenou alespoň na 1. Další informace najdete v referenční příručce Spring Cloud Stream Kafka Binder.

  2. Upravte soubor spouštěcí třídy, aby se zobrazil následující obsah.

    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);
        }
    
    }
    

    Tip

    V tomto kurzu nejsou v konfiguracích ani kódu žádné ověřovací operace. Připojení ke službám Azure ale vyžaduje ověření. K dokončení ověřování je potřeba použít identitu Azure. Spring Cloud Azure používá DefaultAzureCredential, kterou poskytuje knihovna identit Azure, která vám pomůže získat přihlašovací údaje bez jakýchkoli změn kódu.

    DefaultAzureCredential podporuje více metod ověřování a určuje, kterou metodu použít za běhu. Tento přístup umožňuje vaší aplikaci používat různé metody ověřování v různých prostředích (například v místních a produkčních prostředích) bez implementace kódu specifického pro prostředí. Další informace naleznete v tématu DefaultAzureCredential.

    K dokončení ověřování v místních vývojových prostředích můžete použít Azure CLI, Visual Studio Code, PowerShell nebo jiné metody. Další informace najdete v tématu Ověřování Azure ve vývojových prostředích Java. K dokončení ověřování v hostitelských prostředích Azure doporučujeme použít spravovanou identitu přiřazenou uživatelem. Další informace najdete v tématu Co jsou spravované identity pro prostředky Azure?

  3. Spusťte aplikaci. Zprávy jako v následujícím příkladu se publikuje v protokolu vaší aplikace:

    Kafka version: 3.0.1
    Kafka commitId: 62abe01bee039651
    Kafka startTimeMs: 1622616433956
    New message received: 'Hello World'
    

Nasazení do Azure Spring Apps

Teď, když máte aplikaci Spring Boot spuštěnou místně, je čas ji přesunout do produkčního prostředí. Azure Spring Apps usnadňuje nasazování aplikací Spring Boot do Azure bez jakýchkoli změn kódu. Služba spravuje infrastrukturu aplikací Spring, aby se vývojáři mohli soustředit na svůj kód. Azure Spring Apps poskytuje správu životního cyklu pomocí komplexního monitorování a diagnostiky, správy konfigurace, zjišťování služeb, integrace CI/CD, modrých zelených nasazení a dalších. Pokud chcete nasadit aplikaci do Azure Spring Apps, přečtěte si téma Nasazení první aplikace do Azure Spring Apps.

Další kroky