Podpora Spring Cloud Azure pro Spring Messaging Azure Event Hubs

Tento článek popisuje, jak můžete používat Spring Cloud Azure a Spring Messaging Azure Event Hubs. Spring Framework poskytuje rozsáhlou podporu integrace se systémy zasílání zpráv.

Systém zasílání zpráv Spring pro Azure Event Hubs

Klíčové koncepty

Azure Event Hubs je nativní služba streamování dat v cloudu, která může streamovat miliony událostí za sekundu s nízkou latencí z libovolného zdroje do libovolného cíle. Projekt Spring Messaging pro azure Event Hubs používá základní koncepty Springu na vývoj řešení zasílání zpráv založených na centrech událostí. Poskytuje šablonu jako abstrakci vysoké úrovně pro odesílání zpráv. Poskytuje také podporu pro zprávami řízené objekty Java typu POJO s anotacemi @EventHubsListener a kontejnerem listeneru. Tyto knihovny podporují použití injektáže závislostí a deklarativní konfigurace. Ve všech těchto případech vidíte podobnosti s podporou JMS v rámci podpory Spring Framework a RabbitMQ v aplikaci Spring AMQP.

Nastavení závislostí

<dependency>
  <groupId>com.azure.spring</groupId>
  <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
  <groupId>com.azure.spring</groupId>
  <artifactId>spring-messaging-azure-eventhubs</artifactId>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
</dependency>

Konfigurace

Knihovna poskytuje následující možnosti konfigurace pro EventHubsTemplate a @EventHubsListener:

Vlastnictví Typ Popis
spring.cloud.azure.message-converter.isolated-object-mapper Boolean Zda se v převaděči zpráv služby Event Hubs používá samostatný bean ObjectMapper. Ve výchozím nastavení je povoleno.
spring.cloud.azure.eventhubs.enabled Boolean Určuje, jestli je služba Azure Event Hubs povolená.
spring.cloud.azure.eventhubs.connection-string Řetězec Hodnota připojovacího řetězce pro obor názvů služby Event Hubs
spring.cloud.azure.eventhubs.namespace Řetězec Hodnota oboru názvů služby Event Hubs, tedy předpona plně kvalifikovaného názvu domény. FQDN by se měl skládat z NamespaceName.DomainName
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name Řetězec Název účtu úložiště
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key Řetězec Přístupový klíč účtu úložiště.
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name Řetězec Název kontejneru úložiště

Základní použití

Vlastní převaděč zpráv služby Event Hubs

Existují dva způsoby konfigurace převaděče zpráv služby Event Hubs:

  • Nakonfigurujte následující vlastnost tak, aby výchozí převaděč zpráv služby Event Hubs používal ObjectMapper bean, což může být vlastní ObjectMapper bean nebo jedna spravovaná službou Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definujte převaděč zpráv služby Event Hubs přímo:

    @Bean
    AzureMessageConverter<EventData, EventData> eventHubsMessageConverter() {
        JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build();
        return new EventHubsMessageConverter(jsonMapper);
    }
    

Odesílání zpráv do služby Azure Event Hubs

K odesílání zpráv použijte následující postup:

  1. Pomocí jednoho z následujících přístupů vyplňte možnosti konfigurace přihlašovacích údajů:

    • Pro přihlašovací údaje jako DefaultAzureCredentialnakonfigurujte v souboru application.yml následující vlastnosti:

      spring:
        cloud:
          azure:
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
      
    • Pro přihlašovací údaje jako připojovací řetězec nakonfigurujte v souboru application.yml následující vlastnosti:

      spring:
        cloud:
          azure:
            eventhubs:
              connection-string: ${AZURE_EVENT_HUBS_CONNECTION_STRING}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
                  account-key: ${CHECKPOINT-ACCESS-KEY}
      
    • U přihlašovacích údajů jako spravovaných identit nakonfigurujte v souboru application.yml následující vlastnosti:

      spring:
        cloud:
          azure:
            credential:
              managed-identity-enabled: true
              client-id: ${AZURE_CLIENT_ID}
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CONTAINER_NAME}
                  account-name: ${ACCOUNT_NAME}
      
    • Pro přihlašovací údaje pro instanční objekt služby nakonfigurujte v souboru application.yml následující vlastnosti:

      spring:
        cloud:
          azure:
            credential:
              client-id: ${AZURE_CLIENT_ID}
              client-secret: ${AZURE_CLIENT_SECRET}
            profile:
              tenant-id: <tenant>
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CONTAINER_NAME}
                  account-name: ${ACCOUNT_NAME}
      

Poznámka:

Pro tenant-idjsou povoleny následující hodnoty: common, organizations, consumersnebo ID tenanta. Další informace o těchto hodnotách najdete v části Použití nesprávného koncového bodu (osobní a organizační účty) v části Chyba AADSTS50020 – Uživatelský účet poskytovatele identity neexistuje v tenantovi. Informace o převodu aplikace s jedním nájemcem na vícenájemcovou najdete v kapitole Převod jednoklientských aplikací na vícenájemcovou vMicrosoft Entra ID.

  1. EventHubsTemplate je automaticky nakonfigurovaný a můžete ho automaticky připojit přímo do vlastních fazolí, jak je znázorněno v následujícím příkladu:

    @Component
    public class MyBean {
    
        private final EventHubsTemplate eventHubsTemplate;
    
        public MyBean(EventHubsTemplate eventHubsTemplate) {
            this.eventHubsTemplate = eventHubsTemplate;
        }
    
        public void someMethod() {
            this.eventHubsTemplate.sendAsync('EVENT_HUB_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe();
        }
    
    }
    

Příjem zpráv ze služby Azure Event Hubs

K příjmu zpráv použijte následující postup:

  1. Vyplňte možnosti konfigurace přihlašovacích údajů.

  2. Přidejte @EnableAzureMessaging poznámku, jak je znázorněno v následujícím příkladu. Tato anotace spouští vyhledávání metod anotovaných pomocí @EventHubsListener a na pozadí vytváří kontejner naslouchače zpráv.

    @SpringBootApplication
    @EnableAzureMessaging
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    Poznámka:

    Aby se zabránilo opakování, od verze 5.21.0 se anotace @EnableAzureMessaging automaticky povoluje pomocí Spring Cloud Azure Auto-configure.

  3. Pokud je k dispozici infrastruktura služby Event Hubs, můžete anotací @EventHubsListener anotovat libovolný bean a vytvořit tak koncový bod naslouchací služby. Následující komponenta vytvoří koncový bod naslouchacího procesu v centru událostí EVENT_HUB_NAME a skupině příjemců $Default:

    @Component
    public class MyBean {
    
        @EventHubsListener(destination = "EVENT_HUB_NAME", group = "$Default")
        public void processMessage(String content) {
            // ...
        }
    
    }
    

Vzorky

Další informace najdete v úložišti na GitHubu azure-spring-boot-samples .