次の方法で共有


Spring Messaging Azure Storage Queue に対する Spring Cloud Azure のサポート

この記事では、Spring Cloud Azure と Spring Messaging Azure Storage Queue を使用する方法について説明します。 Spring Framework は、メッセージング システムとの統合を広範にサポートします。

スプリングメッセージング Azure ストレージキュー

重要な概念

Azure Queue Storage は、大量のメッセージを格納するためのサービスです。 HTTP または HTTPS を使用して認証された呼び出しを使用して、世界中のどこからでもメッセージにアクセスします。 キュー メッセージのサイズは最大 64 KB です。 キューには、ストレージ アカウントの合計容量制限まで、数百万のメッセージを含めることができます。 キューは、非同期的に処理する作業のバックログを作成するために一般的に使用されます。 Azure Queue Storage 用の Spring Messaging プロジェクトは、Service Bus ベースのメッセージング ソリューションの開発に Spring の主要な概念を適用します。 メッセージを送受信するための高度な抽象化として テンプレートが提供されます。 これらのライブラリは、依存関係の挿入と宣言型の構成の使用を促進します。

依存関係のセットアップ

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

コンフィギュレーション

ライブラリには、StorageQueueTemplateの次の構成オプションが用意されています。

プロパティ タイプ 説明
spring.cloud.azure.message-converter.isolated-object-mapper ブーリアン 分離された ObjectMapper Bean がストレージ・キュー・メッセージ・コンバーターに使用されるかどうか。 既定で有効になっています。
spring.cloud.azure.storage.queue.enabled ブーリアン Azure Storage キューが有効になっているかどうか。
spring.cloud.azure.storage.queue.connection-string を する Storage Queue 名前空間の接続文字列の値。
spring.cloud.azure.storage.queue.accountName (英語) ストレージ キュー アカウント名。
spring.cloud.azure.storage.queue.accountKey を する ストレージ キュー アカウント キー。

基本的な使用方法

カスタム ストレージ キュー メッセージ コンバーター

ストレージ キュー メッセージ コンバーターを構成するには、次の 2 つの方法があります。

  • 既定のストレージ キュー メッセージ コンバーターで ObjectMapper Bean を使用するように、次のプロパティを構成します。これは、カスタム ObjectMapper Bean または Spring Boot によって管理される Bean です。

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • ストレージ・キュー・メッセージ・コンバーター Bean を直接定義します。

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

Azure Storage キューへのメッセージの送受信

メッセージを送受信するには、次の手順に従います。

  1. 次のいずれかの方法を使用して、資格情報の構成オプションを入力します。

    • DefaultAzureCredentialとしての資格情報の場合は、application.yml ファイルで次のプロパティを構成します。

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • 接続文字列としての資格情報の場合は、application.yml ファイルで次のプロパティを構成します。

      spring:
        cloud:
          azure:
            storage:
              queue:
                connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}
      
    • 資格情報をマネージド ID として使用するには、application.yml ファイルで次のプロパティを構成します。

      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}
      

tenant-idには、commonorganizationsconsumers、テナント ID の値を指定できます。 これらの値の詳細については、「エラー AADSTS50020 - ID プロバイダーのユーザー アカウントがテナントに存在しない」の「間違ったエンドポイント (個人用アカウントと組織アカウント) セクションを参照してください。 シングルテナント アプリの変換の詳細については、「Microsoft Entra IDでのシングルテナント アプリをマルチテナントに変換する」を参照してください。

  • サービス プリンシパルとしての資格情報の場合は、application.yml ファイルで次のプロパティを構成します。

    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}
    

tenant-idには、commonorganizationsconsumers、テナント ID の値を指定できます。 これらの値の詳細については、「エラー AADSTS50020 - ID プロバイダーのユーザー アカウントがテナントに存在しない」の「間違ったエンドポイント (個人用アカウントと組織アカウント) セクションを参照してください。 シングルテナント アプリの変換の詳細については、「Microsoft Entra IDでのシングルテナント アプリをマルチテナントに変換する」を参照してください。

  1. StorageQueueTemplate は自動構成されます。 次の例に示すように、独自の Bean に直接自動接続して、メッセージの送受信を行うことができます。

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

サンプル

詳細については、GitHub の azure-spring-boot-samples リポジトリ を参照してください。