2016-12-09 10 views
0

This page beschreibt, wie Sitzungen in Azure Service Bus verwendet werden, um Nachrichten derselben Quelle in denselben Empfänger zu gruppieren.Azure-Servicebusitzungen - MaxConcurrentSessions vs. MaxConcurrentCalls

In sitzungs weniger Warteschlange Prozessoren kann ich steuern, wie viele Nachrichten, die ich parallel bekommen kann:

new OnMessageOptions { MaxConcurrentCalls = 10 }; 

Wenn ich diese Optionen übergeben, nicht mehr als 10 Nachrichten zur gleichen Zeit behandelt werden.

nun für Session-ful Prozessoren werden die Optionen durch

ersetzt
new SessionHandlerOptions { MaxConcurrentSessions = 10 }; 

, das eine andere Bedeutung von nicht mehr als 10 Sitzungen hat zur gleichen Zeit.

Meine Sitzungen sind relativ langlebig und meistens inaktiv, daher muss ich diesen Parameter auf einen hohen Wert setzen. Trotzdem möchte ich die Anzahl der parallelen Nachrichten begrenzen.

Ist das aus der Box möglich?

Was wäre die praktische Grenze der Parallelisierung, wenn ich MaxConcurrentSessions auf int.MaxValue setze?

Antwort

0

Aus der Dokumentation:

Ein einzelner Empfänger Prozess besonders einfach sehr viele gleichzeitige Sitzungen behandeln können, wenn sie mit streng asynchronen Code geschrieben werden; Jonglieren mehrerer Dutzend gleichzeitiger Sitzungen effektiv automatisch mit dem Callback-Modell.

Im Fall, wenn Sie mehrere Sitzungen, die langlebig sind:

Die Strategie sehr viele gleichzeitige Sitzungen für die Behandlung, wobei jede Sitzung nur sporadisch Nachrichten empfängt, ist für den Handler, die Sitzung fallen nach einige Leerlaufzeit und Abholverarbeitung erneut, wenn die Sitzung akzeptiert wird, wenn die nächste Sitzung eintrifft.

+0

Noch weiß ich nicht, wie man 'MaxConcurrentSessions' wählt. Nehmen wir an, mein Leerlaufzeitlimit beträgt 1 Minute, jede Nachricht dauert 1 Sekunde und ich möchte maximal 10 gleichzeitige Nachrichten verarbeiten. Dann muss ich 'MaxConcurrentSessions' auf 60 * 10 setzen. Aber das bedeutet wahrscheinlich, dass SB 600 neue Sitzungen gleichzeitig akzeptiert? – Mikhail

+0

Wenn Sie 'MaxConcurrentSessions' auf 600 setzen, können Sie tatsächlich bis zu 600 Sitzungen verarbeiten. Alles hängt davon ab, in welchen Sitzungen diese Nachrichten ankommen. Ich denke, was Sie tun möchten, ist Ihre "MaxConcurrentSessions" um 10 zu halten und sobald Sie eine Nachricht für eine Sitzung verarbeitet haben, diese Sitzung zu löschen (wie Dokumentation vorschreibt). Es gibt eine Menge, die ich über Ihr System nicht weiß, also kann ich nicht antworten, was ich nicht weiß. Warum 10 gleichzeitige Nachrichten und nicht mehr, dass das einer von denen ist. Testen Sie auch, ob Ihre Annahme über die Arbeit/Leerlaufzeit funktioniert oder dass einige Sitzungen "verhungern". –

+0

Das Limit wird benötigt, um eine Überlastung externer Systeme zu vermeiden, die vom Warteschlangenprozessor aufgerufen werden. Ich versuche jetzt, die Sitzung nach jeder verarbeiteten Nachricht zu schließen. Scheint gut zu funktionieren, aber ich denke, das führt dazu, dass alle vorab geholten Nachrichten derselben Sitzung in die Warteschlange zurückgebracht und bis zum nächsten Versuch als nicht erfolgreich markiert werden. Ich denke, ich muss das "Timeout" machen, aber dann bin ich wieder bei der Frage, ob ich die Anzahl der Sitzungen oder die Anzahl der Nachrichten begrenzen soll. – Mikhail

Verwandte Themen