2009-03-23 8 views
2

Ich bin neu bei der Verwendung des SQL Service 2005 Service Broker. Ich habe Warteschlangen erstellt und habe erfolgreich Gespräche usw. geführt. Ich möchte jedoch Nachrichten "drosseln", und ich bin mir nicht sicher, wie ich das anstellen soll.Wie Reduzieren einer Überschwemmung einer Service Broker-Warteschlange?

Nachrichten werden von einem gespeicherten Proc gesendet, der von einer Mehrbenutzeranwendung aufgerufen wird. Angenommen, 20 Benutzer veranlassen, dass dieser Proc innerhalb von 30 Sekunden einmal aufgerufen wird, muss er nur einmal gesendet werden. Ich denke also, ich brauche einen Weg von meinem Proc, um zu sehen, ob innerhalb der letzten 30 Sekunden eine Nachricht gesendet wurde. Gibt es eine Möglichkeit, das zu tun?

Eine Idee, die ich hatte, war eine Nachricht an eine "Antwort" -Warteschlange zu senden, die angibt, ob der Aktivierungsprozess der Anfragewarteschlange aufgerufen wurde. Dann in meinem gespeicherten Proc (aufgerufen von User App) sehen, ob diese bestimmte Nachricht kürzlich aufgerufen wurde. Problem ist, ich möchte nicht, dass dies die Antwort-Warteschlange durcheinander bringt. Kann man in eine Warteschlange schauen (nicht empfangen), um zu sehen, ob eine Nachricht darin existiert?

Oder gibt es einen einfacheren Weg, um zu erreichen, wonach ich suche?

Antwort

4

Ja, Sie können einen Blick in eine Warteschlange werfen, um zu sehen, ob sich vorher eine Nachricht darin befindet. Einfach die Warteschlange mit SELECT statt RECEIVE abfragen und Sie können sich die Daten anschauen.

Eine bessere Wette wäre, die Nachrichten zu senden und die gespeicherte Prozedur, die die Nachrichten empfängt, zu entscheiden, ob die Nachricht verworfen werden soll oder nicht.

Ich sende Hunderttausende von Nachrichten zu Service-Broker zu einer Zeit ohne jede Art von Leistungsproblem.

Wenn Leistungsprobleme auftreten, versuchen Sie, mehr als eine Nachricht pro Konversation zu senden, da dies die schnellste und einfachste Möglichkeit zur Verbesserung der Service Broker-Leistung ist.

1

Nicht sicher, ob Sie dies in SB irgendwie tun könnten, aber könnten Sie einfach eine Tabelle mit einem Zeitstempelfeld darin haben, die aktualisiert wurde, wenn eine Nachricht gesendet wird. Der Proc würde nach einem Zeitunterschied von> 30 Sekunden suchen und senden.

Verwandte Themen