es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Throttling de Azure Service Bus

Tenemos una arquitectura construida alrededor del bus de servicios, que funciona bien. Actualmente también estamos utilizando el mismo bus de servicios con espacios de nombres para registrar nuestras actividades a través de un sink personalizado de Serilog (que será reemplazado con datadog).

Esto ha causado que en nuestro ambiente de pruebas, ocasionalmente seamos limitados por el bus de servicios (estamos en la opción estándar y no en la premium). Sabemos que es un problema de nuestro lado y estamos trabajando para resolverlo.

Sin embargo, quiero actualizar nuestro código para manejar la excepción de limitación de manera más elegante y potencialmente agregar un retraso antes de intentarlo nuevamente.

Lo que no está claro en la documentación son los detalles de la excepción:

https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-throttling

Actualmente capturamos la excepción de tipo MessagingException, no está claro si se lanzará este mensaje.

¿Alguien ha manejado excepciones de limitación de esta manera?

Actualmente, la solución parece ser capturar el error, verificar el mensaje de la excepción con el mensaje de la excepción (creo que examinar el código de error es la implementación menos acoplada) y escribir un código dedicado para reaccionar a él.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Azure y Service Bus, recomendaría el siguiente enfoque para manejar las excepciones de limitación de velocidad:

    1. Captura la clase ThrottlingException, que es un tipo específico de excepción lanzada cuando los recursos de Service Bus están siendo limitados. MessagingException es una excepción general que puede no reflejar con precisión el problema.
    2. Utiliza las propiedades de ThrottlingException, como Retry-After, para determinar cuánto tiempo esperar antes de reintentar la operación.

    3. Implementa un mecanismo de reintentos con un tiempo de espera incremental, como una estrategia de retroceso exponencial, para evitar sobrecargar los recursos de Service Bus y reducir la probabilidad de ser limitado nuevamente.

    4. Considera actualizar a un nivel premium si el nivel estándar continua causando problemas de limitación incluso después de implementar las soluciones anteriores.

    En general, la clave está en manejar ThrottlingException de manera específica y deliberada para evitar afectar negativamente los recursos de Service Bus y garantizar que el sistema pueda recuperarse correctamente de la excepción.

Comments are closed.