Compensation azure service bus de la file d'attente d'un seul coup
Nous sommes à l'aide d'un bus de service de la file d'attente dans notre projet. Nous avons besoin d'une fonction pour supprimer tous les messages de la file d'attente lorsque l'administrateur choisit pour effacer la file d'attente. J'ai cherché sur le net mais impossible de trouver une fonction qui le fait à l'intérieur de la QueueClient
classe.
Dois-je faire éclater tous les messages un par un, puis marquant leur complète pour effacer la file d'attente ou est-il un meilleur moyen?
QueueClient queueClient = _messagingFactory.CreateQueueClient(
queueName, ReceiveMode.PeekLock);
BrokeredMessage brokeredMessage = queueClient.Receive();
while (brokeredMessage != null )
{
brokeredMessage.Complete();
brokeredMessage = queueClient.Receive();
}
- J'ai récemment fait face à la même question, et de supprimer et de recréer n'était pas une option, boucle fonctionne, mais c'est lent, cependant, l'utilisation de la
PrefetchCount
membre de laQueueClient
vous pouvez facilement le lot de quelques milliers de messages en un seul voyage aller-retour, pour accélérer les choses énormément: msdn.microsoft.com/en-us/library/...
Vous devez vous connecter pour publier un commentaire.
À l'aide de la
Receive()
méthode à l'intérieur de la boucle while comme vous à cause de votre code à exécuter indéfiniment une fois la file d'attente est vide, comme leReceive()
méthode sera en attente pour un autre message sur la file d'attente.Si vous voulez que cela s'exécuter automatiquement, essayez d'utiliser le
Peek()
méthode.Par exemple:
Vous pouvez rendre cela plus simple de nouveau avec le
ReceiveMode.ReceiveAndDelete
comme cela a été mentionné par hocho.À l'aide de :
vous pouvez écrire une méthode qui vide un service de bus de la file d'attente ou un sujet/abonnement:
Je vais avoir de bons résultats en utilisant une combinaison de ReceiveAndDelete, PrefetchCount, ReceiveBatchAsync, et une vérité simple boucle plutôt qu'à l'aide de Peek. Exemple avec MessagingFactory ci-dessous:
Ne requiert que la WindowsAzure.ServiceBus package Nuget.
Pour Azure-ServiceBus des Files d'attente il y a un
ReceiveBatch
-méthode qui vous permet de recevoir un lot de n-les messages à la fois. Combiné avecReceiveMode.ReceiveAndDelete
vous pouvez effacer la file d'attente de manière plus efficace.Mise en garde Le nombre n de messages peuvent être retournés, mais il n'est pas garanti. Il y a aussi une limite pour le message-la taille des lots de 256K.
Le moyen le plus rapide pour nettoyer un Azure ServiceBus de la File d'attente est d'un très court
DefaultMessageTimeToLive
, attendre quelques secondes, essayez de recevoir de la file d'attente de forcer la mise à jour, puis restaurer la premièreDefaultMessageTimeToLive
.Vous pouvez le faire à partir du portail ou de code :
Il y a une simple
Clear()
méthode pour effacer la totalité de la file d'attente si vous utilisez le WindowsAzure.De stockage de la bibliothèque de nuget. J'utilise leMicrosoft.Windows.Azure.Queue
classe à partir de la bibliothèque pour gérer la file d'attente. Sinon, vous pouvez accéder via leur API par leur documentation. Je ne sais pas combien de temps la méthode a été, dans l'Azur de la bibliothèque, et probablement il n'existait pas lorsque la question était à l'origine posée, mais le RESTE de l'API de tiges à partir de 2014 par cette Azure commentaires postLe plein .NET code pour effacer la file d'attente avec l'Azur de la bibliothèque est: