Compartir a través de


Compatibilidad de Azure con Spring Cloud para la cola de Azure Storage de Spring Messaging

En este artículo se describe cómo puede usar Spring Cloud Azure y La cola de Azure Storage de Spring Messaging. Spring Framework proporciona una amplia compatibilidad con la integración con sistemas de mensajería.

Azure Storage Queue en Spring Messaging

Conceptos clave

Azure Queue Storage es un servicio para almacenar un gran número de mensajes. Puede acceder a los mensajes desde cualquier lugar del mundo a través de llamadas autenticadas mediante HTTP o HTTPS. Un mensaje de cola puede tener un tamaño de hasta 64 KB. Una cola puede contener millones de mensajes, hasta el límite de capacidad total de una cuenta de almacenamiento. Las colas se usan normalmente para crear un trabajo pendiente para procesar de forma asincrónica. El proyecto Spring Messaging para Azure Queue Storage aplica conceptos básicos de Spring al desarrollo de soluciones de mensajería basadas en Bus de servicio. Proporciona una plantilla de como una abstracción de alto nivel para enviar y recibir mensajes. Estas bibliotecas promueven el uso de la inserción de dependencias y la configuración declarativa.

Configuración de dependencias

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

Configuración

La biblioteca proporciona las siguientes opciones de configuración para StorageQueueTemplate:

Propiedad Tipo Descripción
spring.cloud.azure.message-converter.isolated-object-mapper booleano Si se usa un bean de ObjectMapper aislado para el convertidor de mensajes de cola de Storage. Habilitado de forma predeterminada.
spring.cloud.azure.storage.queue.enabled booleano Si una cola de Azure Storage está habilitada.
spring.cloud.azure.storage.queue.connection-string Cuerda Valor de cadena de conexión de espacio de nombres de cola de storage.
spring.cloud.azure.storage.queue.accountName Cuerda Nombre de la cuenta de cola de Storage.
spring.cloud.azure.storage.queue.accountKey Cuerda Clave de cuenta de cola de Storage.

Uso básico

Convertidor de mensajes de cola de Almacenamiento personalizado

Hay dos maneras de configurar el convertidor de mensajes de cola de Storage:

  • Configure la siguiente propiedad para que el convertidor de mensajes de cola de Storage predeterminado use un ObjectMapper bean, que puede ser el bean personalizado ObjectMapper o uno administrado por Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Defina directamente el convertidor de mensajes de cola de Storage:

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

Envío y recepción de mensajes a la cola de Azure Storage

Siga estos pasos para enviar y recibir mensajes:

  1. Rellene las opciones de configuración de credenciales mediante uno de los métodos siguientes:

    • Para las credenciales como DefaultAzureCredential, configure las siguientes propiedades en el archivo application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • Para las credenciales como cadena de conexión, configure las siguientes propiedades en el archivo application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}
      
    • Para las credenciales como identidades administradas, configure las siguientes propiedades en el archivo 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}
      

Nota:

Se permiten los siguientes valores para tenant-id: common, organizations, consumerso el identificador de inquilino. Para obtener más información sobre estos valores, consulte la sección Uso del punto de conexión incorrecto (cuentas personales y de organización) de Error AADSTS50020: la cuenta de usuario del proveedor de identidades no existe en el inquilino. Para obtener información sobre cómo convertir su aplicación de un solo inquilino a multiinquilino, consulte Convertir aplicación de un solo inquilino a multiinquilino en Microsoft Entra ID.

  • Para las credenciales como entidad de servicio, configure las siguientes propiedades en el archivo 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}
    

Nota:

Se permiten los siguientes valores para tenant-id: common, organizations, consumerso el identificador de inquilino. Para obtener más información sobre estos valores, consulte la sección Uso del punto de conexión incorrecto (cuentas personales y de organización) de Error AADSTS50020: la cuenta de usuario del proveedor de identidades no existe en el inquilino. Para obtener información sobre cómo convertir su aplicación de un solo inquilino a multiinquilino, consulte Convertir aplicación de un solo inquilino a multiinquilino en Microsoft Entra ID.

  1. StorageQueueTemplate está configurado automáticamente. Puede conectarse automáticamente directamente a sus propios frijoles para enviar o recibir mensajes, como se muestra en el ejemplo siguiente:

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

Muestras

Para más información, consulte el repositorio de azure-spring-boot-samples en GitHub.