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?