2009-09-02 2 views
6

SQL Service Broker verwenden die folgende Heuristik, um zu bestimmen, wenn Sie Nachrichten in der Warteschlange haben, die Ihre Anwendung zu verhindern, dass eine nützliche Arbeit zu tun.Machen Sie Service Broker weniger aggressiv bei der Erkennung von Giftmeldungen?

„Service Broker bietet eine automatische Gift Nachricht Erkennung Wenn eine Transaktion, die eine RECEIVE-Anweisung enthält Wenn der Broker fünfmal zurückgesetzt wird, deaktiviert er alle Warteschlangen, von denen die Transaktion Nachrichten empfangen hat, indem er den Warteschlangenstatus automatisch auf OFF setzt. " (http://msdn.microsoft.com/en-us/library/ms166137.aspx)

Mir geht es gut mit diesem grundlegenden Ansatz, aber gibt es eine Möglichkeit, die Anzahl der Wiederholungen von fünf auf etwas höher, vielleicht zwanzig zu ändern?

Der Grund, dass dies für mich nützlich wäre, ist, dass der Code, den ich derzeit zur Verarbeitung der Warteschlange verwende, eine App außerhalb von Sql Server ist, die etwa 10 Worker-Threads hat, von denen jeder eine unabhängige SqlConnection hat führt seine eigenen unabhängigen RECEIVE-Anweisungen aus. Wenn diese Anwendung aus irgendeinem Grund abstürzt, führt dies möglicherweise zu einer separaten Rollback-Transaktion für jeden Worker-Thread. Dies ist genug Rollbacks, um die Warteschlange zu deaktivieren. Im Gegensatz dazu möchte ich in der Lage sein, meine Anwendung zu beenden, ohne die Warteschlange zu deaktivieren. Ich sollte wahrscheinlich die Anwendung neu schreiben einen einzigen SqlConnection zu verwenden, aber es wäre viel einfacher, wenn ich nur so etwas wie

ALTER QUEUE MyQueue SET RollbacksBeforePoison=20 

Ist so etwas möglich sagen könnte?

Antwort

11

Nein, die Countdown-Anzahl für die Erkennung von Poison-Nachrichten ist fest auf 5 codiert und kann nicht geändert werden. Wenn eine Warteschlange jedoch deaktiviert ist, wird in der Warteschlange für das Ereignis BROKER_QUEUE_DISABLED eine Ereignisbenachrichtigung ausgelöst. Sie können dieses Ereignis abonnieren und über einen Handler verfügen, der einen Administrator benachrichtigt oder die Warteschlange sogar wieder aktiviert. Auch könnte die Anwendung möglicherweise etwas wie the external activation mechanis m nutzen, um ihre Thread-Pool-Größe auf die Rate eingehender Nachrichten abzustimmen.

Aktualisiert

Ab SQL Server 2008 R2 gibt es für ALTER/CREATE QUEUE:

POISON_MESSAGE_HANDLING(STATUS = OFF/ON) 

Gibt an, ob Gift Nachricht Handhabung aktiviert ist eine neue Option ist. Der Standardwert ist ON.

Eine Warteschlange, die die Giftmeldung enthält, die auf OFF gesetzt ist, wird nach fünf aufeinanderfolgenden Transaktions-Rollbacks nicht deaktiviert. Dies ermöglicht, dass ein benutzerdefiniertes Giftnachrichtenübergabesystem von der Anwendung definiert wird.

Verwandte Themen