Spring Cloud Azure-támogatás a Spring Messaging Azure Storage-üzenetsorhoz

Ez a cikk azt ismerteti, hogyan használhatja a Spring Cloud Azure-t és a Spring Messaging Azure Storage-üzenetsort. A Spring Framework széles körű támogatást nyújt az üzenetkezelési rendszerekkel való integrációhoz.

Spring Messaging Azure-tárolási üzenetsor

Főbb fogalmak

Az Azure Queue Storage nagy mennyiségű üzenet tárolására szolgáló szolgáltatás. A világ bármely pontjáról elérheti az üzeneteket hitelesített hívásokon keresztül HTTP vagy HTTPS használatával. Az üzenetsor-üzenetek mérete legfeljebb 64 KB lehet. Az üzenetsorok több millió üzenetet tartalmazhatnak, akár a tárfiók teljes kapacitáskorlátját is elérhetik. A sorokat gyakran használják hátralék létrehozására az aszinkron feldolgozáshoz. Az Azure Queue Storage-hoz készült Spring Messaging projekt alapvető Spring-fogalmakat alkalmaz a service bus-alapú üzenetkezelési megoldások fejlesztésére. Egy sablont, amely magas szintű absztrakció az üzenetek küldéséhez és fogadásához. Ezek a kódtárak elősegítik a függőséginjektálás és a deklaratív konfiguráció használatát.

Függőség beállítása

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

Konfiguráció

A kódtár a következő konfigurációs beállításokat biztosítja a StorageQueueTemplate:

Ingatlan Típus Leírás
spring.cloud.azure.message-converter.isolated-object-mapper Boolean Azt jelzi, hogy egy izolált ObjectMapper-bean van-e használva a Storage Queue üzenetkonverteréhez. Alapértelmezés szerint engedélyezve van.
spring.cloud.azure.storage.queue.enabled Boolean Hogy engedélyezve van-e egy Azure Storage-üzenetsor.
spring.cloud.azure.storage.queue.connection-string Lánc Storage Queue Namespace kapcsolati sztring értéke.
spring.cloud.azure.storage.queue.accountName Lánc Storage Queue-fiók neve.
spring.cloud.azure.storage.queue.accountKey Lánc Storage Queue-fiókkulcs.

Alapszintű használat

Custom Storage Queue üzenetkonverter

A Storage Queue üzenetkonverter kétféleképpen konfigurálható:

  • Konfigurálja a következő tulajdonságot úgy, hogy az alapértelmezett Storage Queue üzenetkonverter használjon egy ObjectMapper babot, amely lehet egyéni ObjectMapper bab vagy a Spring Boot által felügyelt:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Adja meg közvetlenül a Storage Queue üzenetkonverterét:

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

Üzenetek küldése és fogadása az Azure Storage-üzenetsorba

Az alábbi lépésekkel küldhet és fogadhat üzeneteket:

  1. Adja meg a hitelesítő adatok konfigurációs beállításait az alábbi módszerek egyikével:

    • Hitelesítő adatok DefaultAzureCredentialesetén konfigurálja a következő tulajdonságokat a application.yml fájlban:

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • A hitelesítő adatok kapcsolati sztringként való megadásához konfigurálja a következő tulajdonságokat a application.yml fájlban:

      spring:
        cloud:
          azure:
            storage:
              queue:
                connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}
      
    • A hitelesítő adatok felügyelt identitásként való megadásához konfigurálja a következő tulajdonságokat a application.yml fájlban:

      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}
      

Megjegyzés:

A következő értékek engedélyezettek tenant-id: common, organizations, consumersvagy bérlőazonosító. Ezekről az értékekről további információt a Helytelen végpont (személyes és szervezeti fiókok) szakaszában talál, amely az AADSTS50020 - Az identitásszolgáltatótól származó felhasználói fiók nem létezik a bérlőben hiba részét képezi. Az egybérlős alkalmazás konvertálásáról további információért lásd: Az egybérlős alkalmazás átalakítása több-bérlőssé a Microsoft Entra ID rendszeren.

  • A szolgáltatásnévként megadott hitelesítő adatokhoz konfigurálja a következő tulajdonságokat a application.yml fájlban:

    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}
    

Megjegyzés:

A következő értékek engedélyezettek tenant-id: common, organizations, consumersvagy bérlőazonosító. Ezekről az értékekről további információt a Helytelen végpont (személyes és szervezeti fiókok) szakaszában talál, amely az AADSTS50020 - Az identitásszolgáltatótól származó felhasználói fiók nem létezik a bérlőben hiba részét képezi. Az egybérlős alkalmazás konvertálásáról további információért lásd: Az egybérlős alkalmazás átalakítása több-bérlőssé a Microsoft Entra ID rendszeren.

  1. StorageQueueTemplate automatikusan konfigurálva van. A következő példában látható módon közvetlenül a saját babjába is beviheti, hogy üzeneteket küldjön vagy fogadjon:

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

Minták

További információt a azure-spring-boot-samples GitHub adattárában talál.