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

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

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

Következő lépések