Dukungan Spring Cloud Azure untuk Spring Messaging Azure Storage Queue

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

Pengiriman Pesan Spring dengan Antrian Penyimpanan Azure

Konsep utama

Azure Queue Storage adalah layanan untuk menyimpan pesan dalam jumlah besar. Anda bisa mengakses pesan dari mana saja di dunia melalui panggilan terautentikasi menggunakan HTTP atau HTTPS. Pesan antrean dapat berukuran hingga 64 KB. Antrean dapat berisi jutaan pesan, hingga batas kapasitas total akun penyimpanan. Antrean umumnya digunakan untuk membuat tumpukan tugas yang perlu diproses secara asinkron. Proyek Spring Messaging for Azure Queue Storage menerapkan konsep inti Spring untuk pengembangan solusi olahpesan berbasis bus layanan. Ini menyediakan templat sebagai abstraksi tingkat tinggi untuk mengirim dan menerima pesan. Pustaka ini mempromosikan penggunaan injeksi dependensi dan konfigurasi deklaratif.

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-storage-queue</artifactId>
</dependency>

Konfigurasi

Pustaka menyediakan opsi konfigurasi berikut untuk StorageQueueTemplate:

Harta benda Tipe Deskripsi
spring.cloud.azure.message-converter.isolated-object-mapper Boolean Apakah kacang ObjectMapper terisolasi digunakan untuk pengonversi pesan Antrean Penyimpanan. Diaktifkan secara default.
spring.cloud.azure.storage.queue.enabled Boolean Apakah Antrean Azure Storage diaktifkan.
spring.cloud.azure.storage.queue.connection-string string Nilai string koneksi Ruang Nama Antrean Penyimpanan.
spring.cloud.azure.storage.queue.accountName string Nama akun Antrean Penyimpanan.
spring.cloud.azure.storage.queue.accountKey string Kunci akun Antrean Penyimpanan.

Penggunaan dasar

Pengonversi pesan Antrean Penyimpanan Kustom

Ada dua cara untuk mengonfigurasi pengonversi pesan Antrean Penyimpanan:

  • Konfigurasikan properti berikut agar pengonversi pesan Antrean Penyimpanan default menggunakan ObjectMapper kacang, yang dapat menjadi biji kustom ObjectMapper Anda atau yang dikelola oleh Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Tentukan biji pengonversi pesan Antrean Penyimpanan secara langsung:

    @Bean
    AzureMessageConverter<QueueMessageItem, QueueMessageItem> storageQueueMessageConverter() {
        JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build();
        return new ServiceBusMessageConverter(jsonMapper);
    }
    

Mengirim dan menerima pesan ke Antrean Azure Storage

Gunakan langkah-langkah berikut untuk mengirim dan menerima 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:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • Untuk kredensial sebagai string koneksi, konfigurasikan properti berikut dalam file application.yml Anda:

      spring:
        cloud:
          azure:
            storage:
              queue:
                connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}
      
    • 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}
            profile:
              tenant-id: <tenant>
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_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.

  • 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>
          storage:
            queue:
              account-name: ${AZURE_STORAGE_QUEUE_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. StorageQueueTemplate dikonfigurasi otomatis. Anda dapat mengotomatiskannya langsung ke kacang Anda sendiri untuk mengirim atau menerima pesan, seperti yang ditunjukkan dalam contoh berikut:

    @Component
    public class MyBean {
    
        private final StorageQueueTemplate storageQueueTemplate;
    
        public MyBean(StorageQueueTemplate storageQueueTemplate) {
            this.storageQueueTemplate = storageQueueTemplate;
        }
    
        public void someMethod() {
            this.serviceBusTemplate.sendAsync('STORAGE_QUEUE_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe();
        }
    
        public void processMessage() {
            Message<?> message = storageQueueTemplate.receiveAsync('STORAGE_QUEUE_NAME', Duration.ofSeconds(30)).block();
            // ...
        }
    
    }
    

Contoh-contoh

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