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
ersetztnew 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?
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
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". –
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