Spring Cloud Azure-stöd för Spring Messaging Azure Event Hubs

Den här artikeln beskriver hur du kan använda Spring Cloud Azure och Spring Messaging Azure Event Hubs. Spring Framework ger omfattande stöd för integrering med meddelandesystem.

Meddelandehantering med Spring och Azure Event Hubs

Viktiga begrepp

Azure Event Hubs är en intern dataströmningstjänst i molnet som kan strömma miljontals händelser per sekund, med låg svarstid, från valfri källa till valfri destination. Spring Messaging för Azure Event Hubs-projektet tillämpar grundläggande Spring-begrepp på utvecklingen av event hubs-baserade meddelandelösningar. Den innehåller en mall som en abstraktion på hög nivå för att skicka meddelanden. Det ger också stöd för meddelandedrivna vanliga gamla Java-objekt (POJO) med @EventHubsListener anteckningar och en lyssnarcontainer. Dessa bibliotek främjar användningen av beroendeinmatning och deklarativ konfiguration. I alla dessa fall kan du se likheter med JMS-stödet i Spring Framework och RabbitMQ-stödet i Spring AMQP.

Konfiguration av beroenden

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

Konfiguration

Biblioteket innehåller följande konfigurationsalternativ för EventHubsTemplate och @EventHubsListener:

Fastighet Typ Beskrivning
spring.cloud.azure.message-converter.isolated-object-mapper booleskt Om en isolerad ObjectMapper-böna används för Event Hubs-meddelandekonverterare. Aktiverad som standard.
spring.cloud.azure.eventhubs.enabled booleskt Om en Azure Event Hubs är aktiverad.
spring.cloud.azure.eventhubs.connection-string Sträng Anslutningssträngsvärde för Event Hubs-namnområde.
spring.cloud.azure.eventhubs.namespace Sträng Event Hubs-namnområdesvärde, som är prefixet för det fullständiga domännamnet. Ett FQDN ska bestå av NamespaceName.DomainName
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name Sträng Namn på lagringskontot.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key Sträng Åtkomstnyckel för lagringskonto.
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name Sträng Namn på lagringscontainer.

Grundläggande användning

Anpassad meddelandekonverterare för Event Hubs

Det finns två sätt att konfigurera Event Hubs-meddelandekonverterare:

  • Konfigurera följande egenskap så att standardkonverteraren för Event Hubs-meddelanden använder en ObjectMapper böna, som kan vara din anpassade böna ObjectMapper eller en som hanteras av Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definiera event hubs-meddelandekonverterarens böna direkt:

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

Skicka meddelanden till Azure Event Hubs

Använd följande steg för att skicka meddelanden:

  1. Fyll i konfigurationsalternativen för autentiseringsuppgifter med någon av följande metoder:

    • För autentiseringsuppgifter som DefaultAzureCredentialkonfigurerar du följande egenskaper i din application.yml-fil:

      spring:
        cloud:
          azure:
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
      
    • För autentiseringsuppgifter som anslutningssträng konfigurerar du följande egenskaper i filen application.yml:

      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}
      
    • För autentiseringsuppgifter som hanterade identiteter konfigurerar du följande egenskaper i din application.yml-fil:

      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}
      
    • För autentiseringsuppgifter för en service principal konfigurerar du följande egenskaper i din application.yml-fil:

      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}
      

Anmärkning

Följande värden tillåts för tenant-id: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din enklientapp till flerklient finns i Konvertera enklientapp till flerklient på Microsoft Entra ID.

  1. EventHubsTemplate är automatiskt konfigurerad och du kan autokoppla den direkt till dina egna bönor, som du ser i följande exempel:

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

Ta emot meddelanden från Azure Event Hubs

Använd följande steg för att ta emot meddelanden:

  1. Fyll i konfigurationsalternativen för autentiseringsuppgifter.

  2. Lägg till annoteringen @EnableAzureMessaging, så som i följande exempel. Den här kommentaren utlöser identifieringen av metoder som kommenterats med @EventHubsListeneroch skapar containern för meddelandelyssnare under täcket.

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

    Anmärkning

    För att undvika upprepning aktiveras annoteringen @EnableAzureMessaging automatiskt i Spring Cloud Azure Auto-configure från och med version 5.21.0.

  3. När Event Hubs-infrastrukturen finns kan du kommentera alla bönor med @EventHubsListener för att skapa en lyssnarslutpunkt. Följande komponent skapar en slutpunkt för en lyssnare i händelsehubben EVENT_HUB_NAME och konsumentgruppen $Default:

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

Exempel

Mer information finns i lagringsplatsen azure-spring-boot-samples på GitHub.