Obsługa Azure Event Hubs w Spring Messaging w Spring Cloud Azure

W tym artykule opisano sposób korzystania z usług Spring Cloud Azure i Spring Messaging Azure Event Hubs. Platforma Spring Framework zapewnia rozbudowaną obsługę integracji z systemami obsługi komunikatów.

Spring Messaging dla Azure Event Hubs

Najważniejsze pojęcia

Azure Event Hubs to natywna usługa przesyłania strumieniowego danych w chmurze, która może przesyłać strumieniowo miliony zdarzeń na sekundę z małym opóźnieniem z dowolnego źródła do dowolnego miejsca docelowego. Projekt Spring Messaging for Azure Event Hubs stosuje podstawowe koncepcje platformy Spring do opracowywania rozwiązań do obsługi komunikatów opartych na centrach zdarzeń. Udostępnia szablon jako abstrakcję wysokiego poziomu do wysyłania komunikatów. Zapewnia również obsługę zwykłych starych obiektów Java opartych na komunikatach (POJO) z @EventHubsListener adnotacjami i kontenerem odbiornika. Te biblioteki promują użycie wstrzykiwania zależności i konfiguracji deklaratywnej. We wszystkich tych sytuacjach można dostrzec podobieństwa do obsługi JMS w Spring Framework oraz obsługi RabbitMQ w Spring AMQP.

Konfiguracja zależności

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

Konfiguracja

Biblioteka udostępnia następujące opcje konfiguracji dla EventHubsTemplate i @EventHubsListener:

Majątek Typ Opis
spring.cloud.azure.message-converter.isolated-object-mapper typ logiczny (boolowski) Czy w konwerterze komunikatów usługi Event Hubs jest używany izolowany bean ObjectMapper. Włączone domyślnie.
spring.cloud.azure.eventhubs.enabled typ logiczny (boolowski) Określa, czy usługa Azure Event Hubs jest włączona.
spring.cloud.azure.eventhubs.connection-string Sznurek Wartość parametrów połączenia dla przestrzeni nazw usługi Event Hubs.
spring.cloud.azure.eventhubs.namespace Sznurek Wartość przestrzeni nazw usługi Event Hubs, stanowiąca prefiks nazwy FQDN. FQDN powinien mieć postać NamespaceName.DomainName
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name Sznurek Nazwa konta magazynu.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key Sznurek Klucz dostępu do konta magazynu.
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name Sznurek Nazwa kontenera magazynu.

Podstawowy sposób użycia

Niestandardowy konwerter komunikatów usługi Event Hubs

Istnieją dwa sposoby konfigurowania konwertera komunikatów usługi Event Hubs:

  • Skonfiguruj następującą właściwość, aby domyślny konwerter komunikatów Event Hubs używał komponentu ObjectMapper, który może być niestandardowym komponentem ObjectMapper lub komponentem zarządzanym przez Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Zdefiniuj bezpośrednio fasolę konwertera komunikatów usługi Event Hubs:

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

Wysyłanie komunikatów do usługi Azure Event Hubs

Aby wysyłać komunikaty, wykonaj następujące czynności:

  1. Wypełnij opcje konfiguracji poświadczeń przy użyciu jednej z następujących metod:

    • Aby skonfigurować poświadczenia jako DefaultAzureCredential, skonfiguruj następujące właściwości w pliku application.yml:

      spring:
        cloud:
          azure:
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
      
    • Jeśli poświadczenia są podawane jako parametry połączenia, skonfiguruj następujące właściwości w pliku 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}
      
    • W przypadku poświadczeń jako tożsamości zarządzanych skonfiguruj następujące właściwości w pliku application.yml:

      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}
      
    • W przypadku poświadczeń jednostki usługi skonfiguruj następujące właściwości w pliku application.yml:

      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}
      

Uwaga

Następujące wartości są dozwolone dla tenant-id: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użyto nieprawidłowego punktu końcowego (kont osobistych i organizacji) sekcji Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje wdzierżawy. Aby uzyskać informacje na temat konwertowania aplikacji z jedną dzierżawą, zobacz Convert single-tenant app to multitenant on Microsoft Entra ID.

  1. EventHubsTemplate jest automatycznie konfigurowana i można ją automatycznie połączyć bezpośrednio z własnymi fasolami, jak pokazano w poniższym przykładzie:

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

Odbieranie komunikatów z usługi Azure Event Hubs

Aby odbierać komunikaty, wykonaj następujące czynności:

  1. Wypełnij opcje konfiguracji poświadczeń.

  2. Dodaj adnotację @EnableAzureMessaging, jak pokazano w poniższym przykładzie. Ta adnotacja powoduje wykrywanie metod oznaczonych adnotacją @EventHubsListener, niejawnie tworząc kontener nasłuchiwania komunikatów.

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

    Uwaga

    Aby uniknąć powtórzeń, od wersji 5.21.0 adnotacja włączająca @EnableAzureMessaging w Spring Cloud Azure Auto-configure jest włączana automatycznie.

  3. Gdy infrastruktura usługi Event Hubs jest dostępna, możesz opatrzyć dowolny bean adnotacją @EventHubsListener, aby utworzyć punkt końcowy nasłuchiwania. Następujący składnik tworzy punkt końcowy nasłuchiwania dla centrum zdarzeń EVENT_HUB_NAME i grupy odbiorców $Default:

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

Przykłady

Więcej informacji można znaleźć w azure-spring-boot-samples repozytorium w serwisie GitHub.