A Spring Kafka használata az Azure Event Hubs for Kafka API-val

Ez az oktatóanyag bemutatja, hogyan konfigurálhat egy Java-alapú Spring Cloud Stream Bindert, hogy az Azure Event Hubs for Kafka használatával üzeneteket küldjön és fogadjon az Azure Event Hubsszal. További információ: Az Azure Event Hubs használata Apache Kafka-alkalmazásokból

Ebben az oktatóanyagban két hitelesítési módszert fogunk tartalmazni: a Microsoft Entra-hitelesítést és a közös hozzáférésű jogosultságkódokat (SAS). A Jelszó nélküli lapon a Microsoft Entra-hitelesítés, a Csatlakozás ion sztring lapon pedig az SAS-hitelesítés látható.

A Microsoft Entra-hitelesítés az Azure Event Hubs for Kafkához való csatlakozás mechanizmusa a Microsoft Entra ID-ban meghatározott identitások használatával. A Microsoft Entra-hitelesítéssel központi helyen kezelheti az adatbázis felhasználói identitásait és más Microsoft-szolgáltatások, ami leegyszerűsíti az engedélykezelést.

Az SAS-hitelesítés az Azure Event Hubs-névtér kapcsolati sztring használja a Kafkához készült Event Hubs delegált hozzáféréséhez. Ha úgy dönt, hogy hitelesítő adatokként használja a közös hozzáférésű jogosultságkódokat, a kapcsolati sztring önállóan kell kezelnie.

Előfeltételek

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.

Hitelesítő adatok előkészítése

Az Azure Event Hubs támogatja a Microsoft Entra ID használatát az Event Hubs-erőforrásokra irányuló kérések engedélyezéséhez. A Microsoft Entra ID-val azure-beli szerepköralapú hozzáférés-vezérléssel (Azure RBAC) adhat engedélyeket egy biztonsági tagnak, amely lehet felhasználó vagy alkalmazásszolgáltatás-tag.

Ha helyileg szeretné futtatni ezt a mintát a Microsoft Entra-hitelesítéssel, győződjön meg arról, hogy a felhasználói fiókja az Azure Toolkit for IntelliJ, a Visual Studio Code Azure Account beépülő modul vagy az Azure CLI segítségével lett hitelesítve. Győződjön meg arról is, hogy a fiók megfelelő engedélyeket kapott.

Feljegyzés

Jelszó nélküli kapcsolatok használatakor hozzáférést kell adnia a fiókjának az erőforrásokhoz. Az Azure Event Hubsban rendelje hozzá a Azure Event Hubs Data Receiver szerepkört a Azure Event Hubs Data Sender 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.

Üzenetek küldése és fogadása az Azure Event Hubsból

Az Azure Event Hub használatával üzeneteket küldhet és fogadhat a Spring Cloud Azure használatával.

A Spring Cloud Azure 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éke (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.11.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.17.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 Starter összetevő:

    <dependency>
       <groupId>com.azure.spring</groupId>
       <artifactId>spring-cloud-azure-starter</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.

  1. Az Event Hub hitelesítő adatainak konfigurálásához adja hozzá az alábbi tulajdonságokat az application.properties fájlhoz .

    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}
    

    Tipp.

    Ha verziót spring-cloud-azure-dependencies:4.3.0használ, akkor adja hozzá a tulajdonságot spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources az értékhez com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration.

    Mivel 4.4.0ezt a tulajdonságot a rendszer automatikusan hozzáadja, ezért nem kell manuálisan hozzáadni.

    Az alábbi táblázat a konfiguráció mezőit ismerteti:

    Mező Leírás
    spring.cloud.stream.kafka.binder.brokers Az Azure Event Hubs-végpontot adja meg.
    spring.cloud.stream.bindings.consume-in-0.destination Megadja a bemeneti cél eseményközpontját, amely ebben az oktatóanyagban a korábban létrehozott központ.
    spring.cloud.stream.bindings.consume-in-0.group Megadja az Azure Event Hubs fogyasztói csoportját, amelyre beállíthatja $Default az Azure Event Hubs-példány létrehozásakor létrehozott alapszintű fogyasztói csoportot.
    spring.cloud.stream.bindings.supply-out-0.destination Megadja a kimeneti cél eseményközpontját, amely ebben az oktatóanyagban megegyezik a bemeneti célhelyével.

    Feljegyzés

    Ha engedélyezi az automatikus témakör-létrehozást, mindenképpen adja hozzá a konfigurációs elemet spring.cloud.stream.kafka.binder.replicationFactor, amelynek értéke legalább 1. További információt a Spring Cloud Stream Kafka Binder referencia-útmutatójában talál.

  2. Szerkessze az indítási osztályfájlt a következő tartalom megjelenítéséhez.

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

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

  3. Indítsa el az alkalmazást. Az alábbi példához hasonló üzenetek megjelennek az alkalmazásnaplóban:

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

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

Következő lépések