Comme l'indique ce document officiel document mentionne le client Service Bus :
Les objets clients du bus de service, tels que QueueClient ou MessageSender, sont créés à l'aide d'une commande MessagingFactory qui est également assure la gestion interne des connexions . Vous ne devez pas fermer les usines de messagerie ou les clients de file d'attente, de sujet et d'abonnement après l'envoi d'un message, puis les recréer lors de l'envoi du message suivant . La fermeture d'une usine de messagerie supprime la connexion au service Service Bus, et une nouvelle connexion est établie lors de la recréation de l'usine. L'établissement d'une connexion est une opération coûteuse que vous pouvez éviter en réutilisant la même fabrique et les mêmes objets clients pour plusieurs opérations. Vous pouvez utiliser en toute sécurité l'objet QueueClient pour envoyer des messages à partir d'opérations asynchrones simultanées et de plusieurs fils d'exécution. .
Je pose la question parce que j'ai reçu dernièrement des TimeoutExceptions de la part du bus de service lors de pics de trafic.
Comme indiqué dans le document officiel document sur la messagerie du bus de service TimeoutException :
Une exception TimeoutException indique qu'une opération initiée par l'utilisateur prend plus de temps que le délai d'attente de l'opération. Vous devez vérifier la valeur de la variable ServicePointManager.DefaultConnectionLimit car le dépassement de cette limite peut également provoquer une erreur d'affichage. TimeoutException .
J'ai supposé que vous pouviez essayer d'augmenter OperationTimeout et ajoutez la logique de réessai comme suit pour construire votre QueueClient et réutiliser cet objet QueueClient.
var builder = new ServiceBusConnectionStringBuilder("{ServicesBusConnectionString}")
{
OperationTimeout = TimeSpan.FromMinutes(5)
};
var messagingFactory = MessagingFactory.CreateFromConnectionString(builder.ToString());
QueueClient queueClient = messagingFactory.CreateQueueClient("{queueName}");
queueClient.RetryPolicy = new RetryExponential(
TimeSpan.Zero,
TimeSpan.FromMinutes(5),
2);
queueClient.SendAsync("{BrokeredMessage}");