Spring Messaging Azure Depolama Kuyruğu için Spring Cloud Azure desteği

Bu makalede Spring Cloud Azure ve Spring Messaging Azure Depolama Kuyruğu'nun nasıl kullanılacağı açıklanmaktadır. Spring Framework, mesajlaşma sistemleriyle tümleştirme için kapsamlı destek sağlar.

Spring Messaging için Azure Depolama Kuyruğu

Temel kavramlar

Azure Kuyruk Depolama, çok sayıda iletiyi depolamaya yönelik bir hizmettir. HTTP veya HTTPS kullanarak kimliği doğrulanmış çağrılar aracılığıyla dünyanın herhangi bir yerinden iletilere erişebilirsiniz. Kuyruk iletisinin boyutu en fazla 64 KB olabilir. Kuyruk, depolama hesabının toplam kapasite sınırına kadar milyonlarca ileti içerebilir. Kuyruklar, genellikle zaman uyumsuz olarak işlenmek üzere bir iş birikimi oluşturmak için kullanılır. Azure Kuyruk Depolama için Spring Messaging projesi, hizmet veri yolu tabanlı mesajlaşma çözümlerinin geliştirilmesine temel Spring kavramlarını uygular. İleti göndermek ve almak için üst düzey soyutlama olarak bir şablonu sağlar. Bu kitaplıklar bağımlılık ekleme ve bildirim temelli yapılandırma kullanımını teşvik eder.

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

Konfigürasyon

Kitaplık, StorageQueueTemplateiç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 Depolama Kuyruğu ileti dönüştürücüsü için yalıtılmış bir ObjectMapper çekirdeğinin kullanılıp kullanılmadığı. Varsayılan olarak etkindir.
spring.cloud.azure.storage.queue.enabled Boolean Azure Depolama Kuyruğu'nın etkinleştirilip etkinleştirilmediği.
spring.cloud.azure.storage.queue.connection-string Dize Depolama Kuyruğu Ad Alanı bağlantı dizesi değeri.
spring.cloud.azure.storage.queue.accountName Dize Depolama Kuyruğu hesap adı.
spring.cloud.azure.storage.queue.accountKey Dize Depolama Kuyruğu hesap anahtarı.

Temel kullanım

Özel Depolama Kuyruğu ileti dönüştürücüsü

Depolama Kuyruğu ileti dönüştürücüsİnİ yapılandırmanın iki yolu vardır:

  • Aşağıdaki özelliği varsayılan Depolama Kuyruğu 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
    
  • Depolama Kuyruğu ileti dönüştürücüsü çekirdeğini doğrudan tanımlayın:

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

Azure Depolama Kuyruğu'na ileti gönderme ve alma

İleti göndermek ve almak 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:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • Bağlantı dizesi olarak kimlik bilgileri için application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

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

  • 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>
          storage:
            queue:
              account-name: ${AZURE_STORAGE_QUEUE_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. StorageQueueTemplate otomatik olarak yapılandırılır. Aşağıdaki örnekte gösterildiği gibi iletileri göndermek veya almak için doğrudan kendi çekirdeklerinize otomatik olarak bağlanabilirsiniz:

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

Örnekler

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