10 Stimmen

Wie garantiert man Azure Queue FIFO

Ich verstehe, dass MS Azure Queue Service Dokument http://msdn.microsoft.com/en-us/library/windowsazure/dd179363.aspx sagt, dass das FIFO-Verhalten (First Out) nicht garantiert ist.

Unsere Anwendung ist jedoch so beschaffen, dass ALLE Nachrichten in FIFO-Reihenfolge gelesen und verarbeitet werden müssen. Könnte jemand bitte vorschlagen, wie man mit Azure Queue Service ein garantiertes FIFO erreicht?

Ich danke Ihnen.

8voto

Renaud Punkte 15064

T docs für Azure Storage-Warteschlangen sagen, dass:

Nachrichten in Storage-Warteschlangen sind in der Regel first-in-first-out aber manchmal können sie nicht in der richtigen Reihenfolge sein; zum Beispiel, wenn die Sichtbarkeits-Timeout-Dauer einer Nachricht abläuft (z. B. als Folge einer Client-Anwendung während der Verarbeitung abstürzt). Wenn die Zeitüberschreitung der Sichtbarkeit Timeout abläuft, wird die Nachricht wieder in der Warteschlange sichtbar, damit einen anderen Arbeiter, der sie aus der Warteschlange nimmt. Zu diesem Zeitpunkt kann die neu sichtbare Nachricht in die Warteschlange gestellt werden (um wieder aus der Warteschlange genommen zu werden), nachdem eine Nachricht die ursprünglich nach ihr in die Warteschlange gestellt wurde.

Vielleicht ist das gut genug für Sie? Oder benutzen Sie den Servicebus.

5voto

RichBower Punkte 206

Die neueste Service-Bus-Version bietet zuverlässige Messaging-Warteschlangen: Warteschlangen, Themen und Abonnements

2voto

Deepak Punkte 2269

Leider führen viele Antworten zu Service-Bus-Warteschlangen, aber ich gehe davon aus, dass es bei der Frage um Speicher-Warteschlangen geht, da die Tags erwähnt werden. Unter Azure Storage Queues , FIFO ist nicht garantiert während in Service Bus wird die FIFO-Nachrichtenreihenfolge garantiert, und zwar nur durch die Verwendung eines Konzepts namens Sitzungen .

Ein einfaches Szenario könnte sein: Wenn ein Verbraucher eine Nachricht aus der Warteschlange erhält, ist sie für Sie nicht sichtbar, wenn Sie der zweite Empfänger sind. Sie gehen also davon aus, dass die zweite Nachricht, die Sie erhalten haben, tatsächlich die erste Nachricht ist (hier hat FIFO versagt :P)

Ziehen Sie den Einsatz von Service Bus in Betracht, wenn dies nicht Ihre Anforderung ist.

1voto

Glenn Ferrie Punkte 9850

Ergänzend zur Antwort von @RichBower... sehen Sie sich das an... Azure Storage Warteschlangen vs. Azure Service Bus Warteschlangen

MSDN (Link zurückgezogen) http://msdn.microsoft.com/en-us/library/windowsazure/hh767287.aspx

learn.microsoft.com https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-azure-and-service-bus-queues-compared-contrasted

0voto

GeMe Punkte 61

Ich weiß nicht, wie schnell Sie die Nachrichten verarbeiten wollen, aber wenn Sie ein echtes FIFO benötigen, dürfen Sie nicht zulassen, dass die Azure-Warteschlange mehr als eine Nachricht auf einmal erhält.

Verwenden Sie dies in Ihrer "program.cs" am Anfang der Funktion.

    static void Main()
            {
                var config = new JobHostConfiguration();

                if (config.IsDevelopment)
                {
                    config.UseDevelopmentSettings();
                }
                config.Queues.BatchSize = 1; //Number of messages to dequeue at the same time.
                config.Queues.MaxPollingInterval = TimeSpan.FromMilliseconds(100); //Pooling request to the queue.

                JobHost host = new JobHost(config);

....your initial information...

            // The following code ensures that the WebJob will be running continuously
            host.RunAndBlock();

Dabei wird jeweils eine Nachricht mit einer Wartezeit von 100 Milisekunden empfangen.

Dies funktioniert perfekt mit einem Logger-Webjob, der die Trace-Informationen in Dateien schreibt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X