Implementación de directivas de reintentos con Java

Cualquier aplicación que se ejecute en la nube o que se comunique con servicios y recursos remotos debe ser capaz de controlar errores transitorios. Es habitual que estas aplicaciones experimenten errores debido a una pérdida momentánea de conectividad de red, el agotamiento del tiempo de espera de una solicitud cuando un servicio o recurso está ocupado u otros factores. Los desarrolladores deben compilar aplicaciones que controlen los errores transitorios de forma transparente para mejorar la estabilidad y la resistencia.

En este artículo, aprenderá a usar la biblioteca cliente de Azure Storage para Java para configurar una directiva de reintentos para una aplicación que se conecta a Azure Blob Storage. Las directivas de reintentos definen de qué forma la aplicación controla las solicitudes con errores y siempre se deben adaptar para que ajusten a los requisitos empresariales de la aplicación y la naturaleza del error.

Configuración de las opciones de reintento

Las directivas de reintentos para Blob Storage se configuran mediante programación, lo que ofrece control sobre cómo se aplican las opciones de reintento a varias solicitudes y escenarios de servicio. Por ejemplo, una aplicación web que emite solicitudes basadas en la interacción del usuario podría implementar una directiva con menos reintentos y retrasos más cortos para aumentar la capacidad de respuesta y notificar los errores a los usuarios. Por otro lado, una aplicación o componente que ejecuta solicitudes por lotes en segundo plano podría aumentar el número de reintentos y usar una estrategia de retroceso exponencial para permitir que la solicitud se complete correctamente.

En la tabla siguiente, se enumeran los parámetros disponibles al construir una instancia de RequestRetryOptions, junto con el tipo, una breve descripción y el valor predeterminado si no se realiza ningún cambio. Debe ser proactivo al ajustar los valores de estas propiedades para satisfacer las necesidades de la aplicación.

Propiedad Tipo Descripción Default value
retryPolicyType RetryPolicyType Opcional. Enfoque que se debe usar para calcular los retrasos de reintento. EXPONENCIAL
maxTries Entero Opcional. Número máximo de reintentos antes de abandonar. 4
tryTimeoutInSeconds Entero Opcional. Tiempo máximo permitido antes de que se cancele una solicitud y se asuma que se produjo un error. Tenga en cuenta que el tiempo de espera se aplica a la solicitud de operación, no a toda la operación general. Este valor debe basarse en el ancho de banda disponible para el equipo host y la proximidad al servicio Storage. Un buen punto inicial podría ser de 60 segundos por MB de tamaño de carga previsto. Integer.MAX_VALUE (segundos)
retryDelayInMs Largo Opcional. Especifica la cantidad de retraso que se usará antes de volver a intentar una operación. 4 ms para EXPONENCIAL; 30 ms para FIJO
maxRetryDelayInMs Largo Opcional. Especifica el retraso máximo permitido antes de volver a intentar una operación. 120 ms
secondaryHost Cadena Opcional. Punto de conexión de la cuenta de almacenamiento secundario para reintentar las solicitudes. Antes de establecer este valor, debería comprender los problemas relacionados con la lectura de datos obsoletos y potencialmente incoherentes. Para obtener más información, consulte Uso de redundancia geográfica para diseñar aplicaciones de alta disponibilidad. None

En el ejemplo de código siguiente, se configuran las opciones de reintento en una instancia de RequestRetryOptions y se pasan a BlobServiceClientBuilder para crear un objeto de cliente:

RequestRetryOptions retryOptions = new RequestRetryOptions(RetryPolicyType.FIXED, 2, 3, 1000L, 1500L, null);
BlobServiceClient client = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(credential)
        .retryOptions(retryOptions)
        .buildClient();

En este ejemplo, cada solicitud de servicio emitida desde el objeto BlobServiceClient usa las opciones de reintento definidas en la instancia RequestRetryOptions. Esta directiva se aplica a las solicitudes de cliente. Puede configurar varias estrategias de reintento para los clientes de servicio en función de las necesidades de la aplicación.

Pasos siguientes

  • Este artículo forma parte de la guía para desarrolladores de Blob Storage para Java. Vea la lista completa de artículos de la guía para desarrolladores en Compilación de la aplicación.
  • Si quiere obtener instrucciones de arquitectura y procedimientos recomendados generales para las directivas de reintento, consulte Control de errores transitorios.
  • Para obtener instrucciones sobre cómo implementar un patrón de reintento para errores transitorios, consulte Patrón de reintento.