Configuración de los tiempos de espera en AWS SDK para Rust
AWS SDK para Rust proporciona varios ajustes para administrar los tiempos de espera de las solicitudes a Servicio de AWS y los flujos de datos estancados. Esto contribuye a que la aplicación funcione de manera óptima en caso de que se produzcan retrasos y fallos inesperados en la red.
Tiempos de espera de API
Cuando hay problemas transitorios que pueden provocar que los intentos de solicitud tarden mucho tiempo o fallen por completo, es importante revisar y establecer tiempos de espera para que la aplicación pueda fallar rápidamente y tener un comportamiento óptimo. El SDK puede volver a intentar automáticamente las solicitudes que fallan. Se recomienda establecer tiempos de espera tanto para el intento individual como para toda la solicitud.
El SDK para Rust proporciona un tiempo de espera predeterminado para establecer una conexión para una solicitud. El SDK no tiene ningún tiempo de espera máximo predeterminado establecido para recibir una respuesta a un intento de solicitud o para toda la solicitud. También están disponibles las siguientes opciones:
| Parámetro | Valor predeterminado | Descripción |
|---|---|---|
| Tiempo de espera de conexión | 3,1 segundos | El tiempo máximo que se debe esperar para establecer una conexión antes de desistir. |
| Tiempo de espera de operación | Ninguno | El tiempo máximo de espera antes de recibir una respuesta del SDK para Rust, incluidos todos los reintentos. |
| Tiempo de espera de intento de operación | Ninguno | El tiempo máximo de espera para un único intento HTTP, tras el cual se puede volver a intentar la llamada a la API. |
| Tiempo de espera de lectura | Ninguno | El tiempo máximo de espera para leer el primer byte de una respuesta desde el momento en que se inicia la solicitud. |
En el siguiente ejemplo, se muestra la configuración de un cliente Amazon S3 con valores de tiempo de espera personalizados.
let config = aws_config::defaults(BehaviorVersion::latest()) .timeout_config( TimeoutConfig::builder() .operation_timeout(Duration::from_secs(5)) .operation_attempt_timeout(Duration::from_millis(1500)) .build() ) .load() .await; let s3 = aws_sdk_s3::Client::new(&config);
Cuando se utilizan conjuntamente los tiempos de espera de operación y de intento, se establece un límite estricto para el tiempo total dedicado a todos los intentos entre reintentos. También se configura una solicitud HTTP individual para poder responder rápido a los errores en las solicitudes lentas.
Como alternativa a establecer estos valores de tiempo de espera en el cliente de servicio para todas las operaciones, puede configurarlos o anularlos para una sola solicitud.
importante
Los tiempos de espera de operación e intento no se aplican a los datos de streaming consumidos después de que el SDK de Rust devuelva una respuesta. Por ejemplo, el consumo de datos de un miembro ByteStream de una respuesta no está sujeto a tiempos de espera de operación.
Protección de secuencia estancada
El SDK para Rust proporciona otra forma de tiempo de espera relacionada con la detección de secuencias estancadas. Una transmisión estancada es una secuencia de carga o descarga que no produce datos durante un período de gracia superior al configurado. Esto evita que las aplicaciones se bloqueen de manera indefinida y no avancen nunca.
La protección de secuencias estancadas devolverá un error cuando una secuencia esté inactiva durante más tiempo del período aceptable.
De forma predeterminada, el SDK para Rust habilita la protección de secuencias estancadas tanto para cargas como para descargas, y busca al menos 1 byte/segundo de actividad con un generoso período de gracia de 20 segundos.
En el siguiente ejemplo, se muestra una StalledStreamProtectionConfig personalizada que deshabilita la protección de carga y cambia el período de gracia para la inactividad a 10 segundos:
let config = aws_config::defaults(BehaviorVersion::latest()) .stalled_stream_protection( StalledStreamProtectionConfig::enabled() .upload_enabled(false) .grace_period(Duration::from_secs(10)) .build() ) .load() .await;
aviso
La protección de transmisiones estancadas es una opción de configuración avanzada. Recomendamos modificar estos valores solo si la aplicación necesita un rendimiento más estricto o si causa algún otro problema.
Deshabilitado de la protección de secuencias estancadas
En el siguiente ejemplo se muestra cómo desactivar por completo la protección de secuencias estancadas:
let config = aws_config::defaults(BehaviorVersion::latest()) .stalled_stream_protection(StalledStreamProtectionConfig::disabled()) .load() .await;