Dukungan Spring Cloud Azure untuk Spring Messaging Azure Event Hubs

Artikel ini menjelaskan cara menggunakan Spring Cloud Azure dan Spring Messaging Azure Event Hubs. Spring Framework memberikan dukungan ekstensif untuk mengintegrasikan dengan sistem olahpesan.

Spring Messaging di Azure Event Hubs

Konsep utama

Azure Event Hubs adalah layanan streaming data asli di cloud yang dapat mengalirkan jutaan peristiwa per detik, dengan latensi rendah, dari sumber apa pun ke tujuan apa pun. Proyek Spring Messaging untuk Azure Event Hubs menerapkan konsep inti Spring untuk pengembangan solusi olahpesan berbasis pusat aktivitas. Ini menyediakan templat sebagai abstraksi tingkat tinggi untuk mengirim pesan. Ini juga mendukung objek Java biasa (POJO) yang digerakkan oleh pesan dengan anotasi @EventHubsListener dan kontainer listener. Pustaka ini mempromosikan penggunaan injeksi dependensi dan konfigurasi deklaratif. Dalam semua kasus ini, Anda dapat melihat kesamaan dengan dukungan JMS di Spring Framework dan dukungan RabbitMQ di Spring AMQP.

Penyiapan dependensi

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

Konfigurasi

Pustaka menyediakan opsi konfigurasi berikut untuk EventHubsTemplate dan @EventHubsListener:

Harta benda Tipe Deskripsi
spring.cloud.azure.message-converter.isolated-object-mapper Boolean Apakah bean ObjectMapper terpisah digunakan untuk konverter pesan Event Hubs. Diaktifkan secara default.
spring.cloud.azure.eventhubs.enabled Boolean Apakah Azure Event Hubs diaktifkan.
spring.cloud.azure.eventhubs.connection-string string Nilai string koneksi Event Hubs Namespace.
spring.cloud.azure.eventhubs.namespace string Nilai Namespace Event Hubs, yang menjadi prefiks FQDN. FQDN harus terdiri dari NamespaceName.DomainName
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name string Nama untuk akun penyimpanan.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key string Kunci akses akun penyimpanan.
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name string Nama kontainer penyimpanan.

Penggunaan dasar

Pengonversi pesan Event Hubs kustom

Ada dua cara untuk mengonfigurasi pengonversi pesan Azure Event Hubs:

  • Konfigurasikan properti berikut agar pengonversi pesan Event Hubs bawaan menggunakan bean ObjectMapper, yang dapat berupa bean ObjectMapper kustom Anda atau bean yang dikelola oleh Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definisikan bean konverter pesan Event Hubs secara langsung:

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

Mengirim pesan ke Azure Event Hubs

Gunakan langkah-langkah berikut untuk mengirim pesan:

  1. Isi opsi konfigurasi kredensial menggunakan salah satu pendekatan berikut:

    • Untuk kredensial sebagai DefaultAzureCredential, konfigurasikan properti berikut dalam file application.yml Anda:

      spring:
        cloud:
          azure:
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
      
    • Untuk kredensial sebagai string koneksi, konfigurasikan properti berikut dalam file application.yml Anda:

      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}
      
    • Untuk kredensial sebagai identitas terkelola, konfigurasikan properti berikut dalam file application.yml Anda:

      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}
      
    • Untuk kredensial sebagai perwakilan layanan, konfigurasikan properti berikut dalam file application.yml Anda:

      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}
      

Nota

Nilai berikut diizinkan untuk tenant-id: common, organizations, consumers, atau ID penyewa. Untuk informasi selengkapnya tentang nilai ini, lihat bagian Menggunakan endpoint yang salah (akun pribadi dan organisasi) dalam Kesalahan AADSTS50020 - Akun pengguna dari penyedia identitas tidak ada di penyewa. Untuk informasi tentang pengonversian aplikasi penyewa tunggal Anda, lihat Mengonversi aplikasi penyewa tunggal ke multipenyewa pada Microsoft Entra ID.

  1. EventHubsTemplate dikonfigurasi otomatis, dan Anda dapat mengotomatiskannya langsung ke kacang Anda sendiri, seperti yang ditunjukkan dalam contoh berikut:

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

Menerima pesan dari Azure Event Hubs

Gunakan langkah-langkah berikut untuk menerima pesan:

  1. Isi opsi konfigurasi kredensial.

  2. Tambahkan anotasi @EnableAzureMessaging, seperti yang ditunjukkan dalam contoh berikut. Anotasi ini memicu penemuan metode yang dianotasi dengan @EventHubsListener, membuat kontainer pendengar pesan di bawah sampul.

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

    Nota

    Untuk menghindari pengulangan, sejak versi 5.21.0, Spring Cloud Azure Auto-configure secara otomatis mengaktifkan anotasi @EnableAzureMessaging.

  3. Saat infrastruktur Event Hubs tersedia, Anda dapat menganotasi bean apa pun dengan @EventHubsListener untuk membuat endpoint pendengar. Komponen berikut membuat titik akhir pendengar di hub peristiwa EVENT_HUB_NAME dan grup konsumen $Default:

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

Contoh-contoh

Untuk informasi selengkapnya, lihat azure-spring-boot-samples repositori di GitHub.