Spring Messaging Azure Event Hubs için Spring Cloud Azure desteği

Bu makalede Spring Cloud Azure ve Spring Messaging Azure Event Hubs'ı nasıl kullanabileceğiniz açıklanmaktadır. Spring Framework, mesajlaşma sistemleriyle tümleştirme için kapsamlı destek sağlar.

Spring Mesajlaşma Azure Olay Merkezi

Temel kavramlar

Azure Event Hubs, bulutta, herhangi bir kaynaktan herhangi bir hedefe düşük gecikme süresiyle saniyede milyonlarca olay akışı sağlayan yerel bir veri akışı hizmetidir. Azure Event Hubs için Spring Messaging projesi, event hubs tabanlı mesajlaşma çözümlerinin geliştirilmesine temel Spring kavramlarını uygular. İleti göndermek için üst düzey soyutlama olarak bir şablonu sağlar. Ayrıca ek açıklamalar ve @EventHubsListener içeren ileti temelli düz eski Java nesneleri (POJO'lar) için de destek sağlar. Bu kitaplıklar bağımlılık ekleme ve bildirim temelli yapılandırma kullanımını teşvik eder. Tüm bu durumlarda Spring Framework'te JMS desteğiyle ve Spring AMQP'de RabbitMQ desteğiyle benzerlikler görebilirsiniz.

Bağımlılık kurulumu

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

Konfigürasyon

Kitaplık, EventHubsTemplate ve @EventHubsListeneriçin aşağıdaki yapılandırma seçeneklerini sağlar:

Mülkiyet Türü Açıklama
spring.cloud.azure.message-converter.isolated-object-mapper Boolean Event Hubs ileti dönüştürücüsü için yalıtılmış bir ObjectMapper çekirdeği kullanılıp kullanılmadığı. Varsayılan olarak etkindir.
spring.cloud.azure.eventhubs.enabled Boolean Azure Event Hubs'ın etkinleştirilip etkinleştirilmediği.
spring.cloud.azure.eventhubs.connection-string Dize Event Hubs Ad Alanı bağlantı dizesi değeri.
spring.cloud.azure.eventhubs.namespace Dize FQDN'nin ön eki olan Event Hubs Ad Alanı değeri. FQDN, NamespaceName.DomainName dosyasından oluşmalıdır
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name Dize Depolama hesabının adı.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key Dize Depolama hesabı erişim anahtarı.
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name Dize Depolama kapsayıcısı adı.

Temel kullanım

Özel Event Hubs ileti dönüştürücüsü

Event Hubs ileti dönüştürücüs'lerini yapılandırmanın iki yolu vardır:

  • Aşağıdaki özelliği, varsayılan Event Hubs ileti dönüştürücüsünü özel ObjectMapper fasulyeniz veya Spring Boot tarafından yönetilen bir ObjectMapper fasulye kullanacak şekilde yapılandırın:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Event Hubs ileti dönüştürücüsü çekirdeğini doğrudan tanımlayın:

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

Azure Event Hubs'a ileti gönderme

İleti göndermek için aşağıdaki adımları kullanın:

  1. Aşağıdaki yaklaşımlardan birini kullanarak kimlik bilgisi yapılandırma seçeneklerini doldurun:

    • DefaultAzureCredentialkimlik bilgileri için application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

      spring:
        cloud:
          azure:
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
      
    • Bağlantı dizesi olarak kimlik bilgileri için application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

      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}
      
    • Yönetilen kimlik olarak kimlik bilgileri için application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

      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}
      
    • Hizmet sorumlusu olarak kimlik bilgileri için application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

      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}
      

Uyarı

tenant-idiçin aşağıdaki değerlere izin verilir: common, organizations, consumersveya kiracı kimliği. Bu değerler hakkında daha fazla bilgi için, Hata AADSTS50020 - Kimlik sağlayıcısından kullanıcı hesabı kiracımevcut değil bölümünün Yanlış uç nokta (kişisel ve kuruluş hesapları) kullanıldı bölümüne bakın. Tek kiracılı uygulamanızı dönüştürme hakkında bilgi için bkz. Tek kiracılı uygulamayı Microsoft Entra IDüzerinde çok kiracılıya dönüştürme.

  1. EventHubsTemplate otomatik olarak yapılandırılır ve aşağıdaki örnekte gösterildiği gibi doğrudan kendi çekirdeklerinize otomatik olarak kablolandırabilirsiniz:

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

Azure Event Hubs'dan ileti alma

İletileri almak için aşağıdaki adımları kullanın:

  1. Kimlik bilgisi yapılandırma seçeneklerini doldurun.

  2. Aşağıdaki örnekte gösterildiği gibi @EnableAzureMessaging ek açıklamasını ekleyin. Bu ek açıklama, @EventHubsListenerile açıklama ek açıklamalı yöntemlerin bulunmasını tetikler ve kapakların altında ileti dinleyici kapsayıcısını oluşturur.

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

    Uyarı

    Sürümünden 5.21.0bu yana yinelemeyi önlemek için Spring Cloud Azure Otomatik yapılandırma ek açıklaması @EnableAzureMessaging otomatik olarak etkinleştirilir.

  3. Event Hubs altyapısı mevcut olduğunda, dinleyici uç noktası oluşturmak için @EventHubsListener ile herhangi bir fasulyeye açıklama ekleyebilirsiniz. Aşağıdaki bileşen, EVENT_HUB_NAME olay hub'ına ve $Default tüketici grubuna bir dinleyici uç noktası oluşturur:

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

Örnekler

Daha fazla bilgi için GitHub'daki azure-spring-boot-samples depoya bakın.