8
votes

Comment garantir la file d'attente Azure FIFO

Je comprends que le document de service de file d'attente MS Azure http: // msdn .microsoft.com / fr-US / US / Bibliothèque / WindowsAzure / DD179363.cox dit le comportement (FIFO) n'est pas garanti.

Cependant, notre application est telle que tous les messages doivent être lus et traités dans l'ordre de FIFO. Quelqu'un pourrait-il suggérer comment réaliser une FIFO garantie en utilisant un service de file d'attente Azure?

merci.


0 commentaires

7 Réponses :


6
votes

La dernière version de bus de service offre une queue de messagerie fiable: files d'attente, sujets et abonnements


1 commentaires

Malheureusement, cela semble répondre à une question différente de ce que l'OP a demandé. Le bus de service Azure est une bête différente au service de la file d'attente Azure



1
votes

Ajout à @richbower Réponse ... Découvrez ceci ... Azure Storage files d'attente vs. Azure Service Bus files d'attente

msdn (lien retiré) http://msdn.microsoft.com/en-us/library/ WindowsAzure / HH767287.aspx

docs.microsoft.com https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-azure-and-service-bus-queues-Comparé-contrasted


0 commentaires

-1
votes

Comme mentionné ici ici https://www.jayway.com/2013/12/20/messagage-ordoring-on-windows-azure-service-bus-queues/ commande n'est pas garantie également dans le bus de service, sauf en utilisant Recieve et Supprimer le mode qui est risqué


0 commentaires

0
votes

Il vous suffit de suivre ci-dessous les étapes pour vous assurer que vous pouvez vous assurer que la commande de message.:

1) créer une file d'attente avec la session activée = false. 2) Lorsque vous enregistrez le message dans la file d'attente, fournissez l'ID de session comme ci-dessous: - P>

queueClient.OnMessage(s =>
{
    var body = s.GetBody<string>();
    var messageId = s.MessageId;
    Console.WriteLine("Message Body:" + body);
    Console.WriteLine("Message Id:" + messageId);
});


1 commentaires

La question concerne les files d'attente de stockage que je suppose



0
votes

Je ne sais pas à quelle vitesse voulez-vous traiter les messages, mais si vous avez besoin d'avoir une vraie FIFO, n'autorise pas la file d'attente d'Azure d'obtenir plus d'un message à la fois.

Utilisez ceci à Votre "programme.cs" en haut de la fonction. xxx

Ceci obtiendra un message à la fois avec une période d'attente de 100 milisecondes.

Ceci fonctionne parfaitement avec un logger webjob pour écrire à des fichiers les informations de traité.


3 commentaires

Ce n'est pas la position décrite ci-dessus. Même si vous n'avez qu'un seul producteur de série, les messages peuvent toujours arriver en panne si un seul consommateur se bloque et commence à lire pendant que le message défaillant n'est pas visible.


@Codemonkey, êtes-vous sûr que si le message n'est pas visible, il n'est pas considéré comme une partie de la session? Pouvez-vous fournir un lien qui prouve le comportement que vous avez mentionné?


@MichaelfreididIm Je pense que nous sommes confondus files d'attente de compte de stockage et files d'attente de bus Azure Service ici. Les files d'attente de compte de stockage n'ont aucune garantie de commande. Les sessions sont une caractéristique du bus de service Azure.



7
votes

Le Docs Dites pour les files d'attente de stockage Azure:

Les messages des files d'attente de stockage sont généralement premiers en première sortie , mais ils peuvent parfois être hors de l'ordre; Par exemple, quand un message La durée de la visibilité expire (par exemple, à la suite d'un Application client Crashing lors du traitement). Quand la visibilité Le délai d'expiration expire, le message devient visible à nouveau sur la file d'attente pour un autre travailleur à en dérocher. À ce moment-là, le message nouvellement visible pourrait être placé dans la file d'attente (à nouveau) après un message cela a été initialement en train d'être poursuivi après.

Peut-être que c'est assez bon pour vous? Sinon utilise le bus de service.


0 commentaires

0
votes

Malheureusement, de nombreuses réponses induisent les files d'attente de bus de service, mais je suppose que la question concerne les files d'attente de stockage des balises mentionnées. Dans Azure Storage File d'attente , FIFO n'est pas GURANTED , tandis que dans Bus de service , la commande de message FIFO est garantie et cela aussi, uniquement avec l'utilisation de Un concept appelé sessions .

Un scénario simple pourrait être, si un consommateur reçoit un message de la file d'attente, il n'est pas visible pour vous lorsque vous êtes le deuxième récepteur. Donc, vous supposez que le deuxième message que vous avez reçu est en fait le premier message (où FIFO a échoué: p)

envisager d'utiliser le bus de service si ce n'est pas votre exigence.


0 commentaires