Spring Cloud Azure-ondersteuning voor Spring Messaging Azure Event Hubs

In dit artikel wordt beschreven hoe u Spring Cloud Azure en Spring Messaging Azure Event Hubs kunt gebruiken. Het Spring Framework biedt uitgebreide ondersteuning voor integratie met berichtensystemen.

Spring Messaging voor Azure Event Hubs

Belangrijke concepten

Azure Event Hubs is een systeemeigen gegevensstreamingservice in de cloud die miljoenen gebeurtenissen per seconde kan streamen, met lage latentie, van elke bron naar elke bestemming. Het Spring Messaging-project voor Azure Event Hubs past kernconcepten van Spring toe op de ontwikkeling van op Event Hubs gebaseerde berichtenoplossingen. Het biedt een sjabloon als een abstractie op hoog niveau voor het verzenden van berichten. Het biedt ook ondersteuning voor berichtgestuurde plain old Java objects (POJO's) met @EventHubsListener annotaties en een listenercontainer. Deze bibliotheken bevorderen het gebruik van afhankelijkheidsinjectie en declaratieve configuratie. In al deze gevallen ziet u overeenkomsten met de JMS-ondersteuning in het Spring Framework en RabbitMQ-ondersteuning in Spring AMQP.

Afhankelijkheid instellen

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

Configuratie

De bibliotheek biedt de volgende configuratieopties voor EventHubsTemplate en @EventHubsListener:

Vastgoed Typ Beschrijving
spring.cloud.azure.message-converter.isolated-object-mapper booleaan Of een geïsoleerde ObjectMapper-bean wordt gebruikt voor Event Hubs-berichtconversieprogramma. Standaard ingeschakeld.
spring.cloud.azure.eventhubs.enabled booleaan Of een Azure Event Hubs is ingeschakeld.
spring.cloud.azure.eventhubs.connection-string Touwtje Waarde van de verbindingsreeks van de Event Hubs-naamruimte.
spring.cloud.azure.eventhubs.namespace Touwtje Event Hubs-naamruimtewaarde, het voorvoegsel van de FQDN. Een FQDN moet bestaan uit NamespaceName.DomainName
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name Touwtje Naam voor het opslagaccount.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key Touwtje Toegangssleutel voor opslagaccount.
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name Touwtje Naam van opslagcontainer.

Basaal gebruik

Conversieprogramma voor aangepaste Event Hubs-berichten

Er zijn twee manieren om Event Hubs-berichtconversieprogramma te configureren:

  • Configureer de volgende eigenschap zodat het standaardberichtconversieprogramma van Event Hubs een ObjectMapper bean gebruikt. Dit kan uw aangepaste ObjectMapper bean zijn of één die wordt beheerd door Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definieer de Event Hubs-berichtconverterbean direct:

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

Berichten verzenden naar Azure Event Hubs

Gebruik de volgende stappen om berichten te verzenden:

  1. Vul de configuratieopties voor aanmeldgegevens in op een van de volgende manieren:

    • Voor aanmeldingsgegevens als DefaultAzureCredential configureert u de volgende eigenschappen in uw application.yml-bestand:

      spring:
        cloud:
          azure:
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
      
    • Voor referenties als verbindingsreeks configureert u de volgende eigenschappen in uw application.yml-bestand:

      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}
      
    • Voor referenties als beheerde identiteiten configureert u de volgende eigenschappen in uw application.yml-bestand:

      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}
      
    • Voor aanmeldingsgegevens voor een service-principal configureert u de volgende eigenschappen in uw application.yml-bestand:

      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}
      

Opmerking

De volgende waarden zijn toegestaan voor tenant-id: common, organizations, consumersof de tenant-id. Zie voor meer informatie over deze waarden de sectie Verkeerd eindpunt gebruikt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van identiteitsprovider bestaat niet in tenant. Zie App met één tenant converteren naar multitenant op Microsoft Entra IDvoor meer informatie over het converteren van uw app met één tenant.

  1. EventHubsTemplate is automatisch geconfigureerd en u kunt deze rechtstreeks in uw eigen bonen instellen, zoals wordt weergegeven in het volgende voorbeeld:

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

Berichten ontvangen van Azure Event Hubs

Gebruik de volgende stappen om berichten te ontvangen:

  1. Vul de configuratieopties voor inloggegevens in.

  2. Voeg de @EnableAzureMessaging aantekening toe, zoals wordt weergegeven in het volgende voorbeeld. Deze annotatie zet de detectie in gang van methoden die zijn geannoteerd met @EventHubsListener, waarbij achter de schermen de message-listenercontainer wordt aangemaakt.

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

    Opmerking

    Om herhaling te voorkomen, wordt de annotatie @EnableAzureMessaging sinds versie 5.21.0 automatisch ingeschakeld door Spring Cloud Azure Auto-configure.

  3. Wanneer de Event Hubs-infrastructuur aanwezig is, kunt u aantekeningen maken bij elke bean met @EventHubsListener om een listener-eindpunt te maken. Het volgende onderdeel maakt een listener-eindpunt op de EVENT_HUB_NAME Event Hub en de $Default consumentengroep:

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

Voorbeelden

Zie de azure-spring-boot-samples opslagplaats op GitHub voor meer informatie.