CREATE BROKER PRIORITY (Transact-SQL)
Definiert eine Prioritätsebene und die Gruppe von Kriterien, anhand derer bestimmt wird, welchen Service Broker-Konversationen die Prioritätsebene zugeordnet wird. Die Prioritätsebene wird jedem Konversationsendpunkt zugeordnet, der die gleiche Kombination aus Verträgen und Diensten verwendet, die für die Konversationspriorität angegeben sind. Die Prioritätswerte liegen zwischen 1 (niedrig) und 10 (hoch). Der Standardwert ist 5.
Transact-SQL-Syntaxkonventionen
Syntax
CREATE BROKER PRIORITY ConversationPriorityName
FOR CONVERSATION
[ SET ( [ CONTRACT_NAME = {ContractName | ANY } ]
[ [ , ] LOCAL_SERVICE_NAME = {LocalServiceName | ANY } ]
[ [ , ] REMOTE_SERVICE_NAME = {'RemoteServiceName' | ANY } ]
[ [ , ] PRIORITY_LEVEL = {PriorityValue | DEFAULT } ]
)
]
[;]
Argumente
ConversationPriorityName
Gibt den Namen für diese Konversationspriorität an. Namen müssen in der aktuellen Datenbank eindeutig sein und den Regeln für Database Engine (Datenbankmodul) Bezeichner entsprechen.SET
Gibt die Kriterien an, anhand derer bestimmt wird, ob die Konversationspriorität für eine Konversation übernommen wird. Wenn angegeben, muss SET mindestens ein Kriterium enthalten: CONTRACT_NAME, LOCAL_SERVICE_NAME, REMOTE_SERVICE_NAME oder PRIORITY_LEVEL. Wenn SET nicht angegeben wird, werden für alle drei Kriterien die Standardwerte festgelegt.CONTRACT_NAME = {ContractName | ANY}
Gibt den Namen eines Vertrags an, der als Kriterium für die Festlegung verwendet wird, ob die Konversationspriorität für eine Konversation gelten soll. ContractName ist ein Database Engine (Datenbankmodul)-Bezeichner und muss den Namen eines Vertrags in der aktuellen Datenbank angeben.ContractName
Gibt an, dass die Konversationspriorität nur für Konversationen übernommen werden kann, bei denen die BEGIN DIALOG-Anweisung, mit der die Konversation gestartet wurde, auf ON CONTRACT ContractName festgelegt ist.ANY
Gibt an, dass die Konversationspriorität für jede Konversation unabhängig vom verwendeten Vertrag übernommen werden kann.
Der Standardwert ist ANY.
LOCAL_SERVICE_NAME = {LocalServiceName | ANY}
Gibt den Namen eines Diensts an, der als Kriterium verwendet wird, um zu bestimmen, ob die Konversationspriorität für einen Konversationsendpunkt übernommen wird.LocalServiceName ist ein Database Engine (Datenbankmodul)-Bezeichner. Er muss den Namen eines Diensts in der aktuellen Datenbank angeben.
LocalServiceName
Gibt an, dass die Konversationspriorität für Folgendes übernommen werden kann:Jeden Konversationsendpunkt für den Initiator, dessen Initiatordienstname LocalServiceName entspricht.
Jeden Konversationsendpunkt für das Ziel, dessen Zieldienstname LocalServiceName entspricht.
ANY
- Gibt an, dass die Konversationspriorität unabhängig vom Namen des vom Endpunkt verwendeten lokalen Diensts für jeden Konversationsendpunkt übernommen werden kann.
Der Standardwert ist ANY.
REMOTE_SERVICE_NAME = {'RemoteServiceName' | ANY}
Gibt den Namen eines Diensts an, der als Kriterium verwendet werden kann, um zu bestimmen, ob die Konversationspriorität für einen Konversationsendpunkt übernommen wird.RemoteServiceName ist ein Literal vom Typ nvarchar(256). Service Broker führt einen bitweisen Vergleich mit der RemoteServiceName-Zeichenfolge aus. Bei dem Vergleich wird die Groß-/Kleinschreibung beachtet, die aktuelle Sortierung hingegen wird nicht berücksichtigt. Der Zieldienst kann in der aktuellen Instanz von Database Engine (Datenbankmodul) oder in einer Remoteinstanz von Database Engine (Datenbankmodul) vorhanden sein.
'RemoteServiceName'
Gibt an, dass die Konversationspriorität für Folgendes übernommen werden kann:Jeden Konversationsendpunkt für den Initiator, dessen zugeordneter Zieldienstname RemoteServiceName entspricht.
Jeden Konversationsendpunkt für das Ziel, dessen zugeordneter Initiatordienstname RemoteServiceName entspricht.
ANY
Gibt an, dass die Konversationspriorität unabhängig vom Namen des dem Endpunkt zugeordneten Remotediensts für jeden Konversationsendpunkt übernommen werden kann.
Der Standardwert ist ANY.
PRIORITY_LEVEL = { PriorityValue | DEFAULT }
Gibt die Priorität an, die jedem Konversationsendpunkt zugeordnet werden soll, der die für die Konversationspriorität angegebenen Verträge und Dienste verwendet. PriorityValue muss ein ganzzahliges Literal zwischen 1 (niedrigste Priorität) und 10 (höchste Priorität) sein. Der Standardwert ist 5.
Hinweise
In Service Broker werden Prioritätsebenen Konversationsendpunkte zugeordnet. Mithilfe der Prioritätsebene wird die Priorität der dem Endpunkt zugeordneten Vorgänge gesteuert. Jede Konversation verfügt über zwei Konversationsendpunkte:
Der Konversationsendpunkt für den Initiator ordnet eine Seite der Konversation dem Initiatordienst und der Initiatorwarteschlange zu. Der Konversationsendpunkt für den Initiator wird beim Ausführen der BEGIN DIALOG-Anweisung erstellt. Zu den dem Konversationsendpunkt für den Initiator zugeordneten Vorgängen zählen folgende:
Sendevorgänge vom Initiatordienst.
Empfangsvorgänge von der Initiatorwarteschlange.
Das Abrufen der nächsten Konversationsgruppe aus der Initiatorwarteschlange
Der Konversationsendpunkt für das Ziel ordnet die andere Seite der Konversation dem Zieldienst und der Warteschlange zu. Der Konversationsendpunkt für das Ziel wird erstellt, wenn mithilfe der Konversation eine Nachricht an die Zielwarteschlange übermittelt wird. Zu den dem Konversationsendpunkt für das Ziel zugeordneten Vorgängen zählen folgende:
Empfangsvorgänge von der Zielwarteschlange.
Sendevorgänge vom Zieldienst.
Das Abrufen der nächsten Konversationsgruppe aus der Zielwarteschlange.
In Service Broker werden Konversationsprioritätsebenen beim Erstellen von Endpunkten zugeordnet. Der Konversationsendpunkt behält die Prioritätsstufe bei, bis die Konversation beendet ist. Neue Prioritäten oder Änderungen an vorhandenen Prioritäten werden nicht für vorhandene Konversationen übernommen.
Service Broker ordnet einem Konversationsendpunkt die Prioritätsebene von der Konversationspriorität zu, dessen Vertrags- und Dienstkriterien die größte Übereinstimmung mit den Eigenschaften des Endpunkts aufweisen. In der folgenden Tabelle wird die Rangfolge bei Übereinstimmungen angezeigt:
Vertrag des Vorgangs |
Lokaler Dienst des Vorgangs |
Remotedienst des Vorgangs |
---|---|---|
ContractName |
LocalServiceName |
RemoteServiceName |
ContractName |
LocalServiceName |
ANY |
ContractName |
ANY |
RemoteServiceName |
ContractName |
ANY |
ANY |
ANY |
LocalServiceName |
RemoteServiceName |
ANY |
LocalServiceName |
ANY |
ANY |
ANY |
RemoteServiceName |
ANY |
ANY |
ANY |
Service Broker sucht zuerst nach einer Priorität, bei der angegebene Vertrag, der lokale Dienst und der Remotedienst dem Vertrag, dem lokalen Dienst und dem Remotedienst des Vorgangs entsprechen. Wird keine entsprechende Priorität gefunden, sucht Service Broker nach einer Priorität, bei der der Vertrag und der lokale Dienst dem Vertrag und dem lokalen Dienst des Vorgangs entsprechen und für die der Remotedienst als ANY angegeben wurde. Dieser Vorgang wird für alle Varianten fortgesetzt, die in der Rangfolgentabelle aufgeführt werden. Wenn keine Übereinstimmung gefunden wird, wird dem Vorgang die Standardpriorität 5 zugewiesen.
Service Broker weist allen Konversationsendpunkten unabhängig voneinander eine Prioritätsstufe zu. Damit Service Broker Prioritätsebenen dem Konversationsendpunkt für den Initiator und das Ziel zuordnet, müssen Sie sicherstellen, dass beide Endpunkte von Konversationsprioritäten abgedeckt werden. Wenn sich die Konversationsendpunkte für den Initiator und das Ziel in verschiedenen Datenbanken befinden, müssen Sie in jeder Datenbank Konversationsprioritäten erstellen. In der Regel wird die gleiche Prioritätsebene für beide Konversationsendpunkte einer Konversation angegeben; Sie können aber auch verschiedene Prioritätsebenen angeben.
Prioritätsebenen werden immer für Vorgänge übernommen, die Nachrichten oder Konversationsgruppenbezeichner aus einer Warteschlange empfangen. Prioritätsebenen werden auch übernommen, wenn Nachrichten von einer Instanz von Database Engine (Datenbankmodul) an eine andere übermittelt werden.
Prioritätsebenen werden nicht verwendet, wenn für die Nachrichtenübermittlung Folgendes zutrifft:
Nachrichten werden aus einer Datenbank übermittelt, für die die Datenbankoption HONOR_BROKER_PRIORITY auf OFF festgelegt ist. Weitere Informationen finden Sie unter ALTER DATABASE SET-Optionen (Transact-SQL).
Nachrichten werden zwischen Diensten in der gleichen Instanz des Datenbankmoduls übermittelt.
Allen Service Broker-Vorgängen in einer Datenbank wird die Standardpriorität 5 zugewiesen, wenn in der Datenbank keine Konversationsprioritäten erstellt wurden.
Berechtigungen
Die Berechtigung zum Erstellen einer Konversationspriorität wird Mitgliedern der festen Datenbankrollen db_ddladmin oder db_owner und der festen Serverrolle sysadmin standardmäßig gewährt. Erfordert die ALTER-Berechtigung für die Datenbank.
Beispiele
A.Zuweisen einer Prioritätsebene zu beiden Richtungen einer Konversation
Mit diesen beiden Konversationsprioritäten wird sichergestellt, dass allen Vorgänge, die SimpleContract zwischen TargetService und InitiatorAService verwenden, die Prioritätsebene 3 zugewiesen wird.
CREATE BROKER PRIORITY InitiatorAToTargetPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = InitiatorServiceA,
REMOTE_SERVICE_NAME = N'TargetService',
PRIORITY_LEVEL = 3);
CREATE BROKER PRIORITY TargetToInitiatorAPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = TargetService,
REMOTE_SERVICE_NAME = N'InitiatorServiceA',
PRIORITY_LEVEL = 3);
B.Festlegen der Prioritätsebene für alle Konversationen, die einen Vertrag verwenden
Weist allen Vorgängen, die einen Vertrag mit dem Namen SimpleContract verwenden, eine Prioritätsebene von 7 zu. Dabei wird davon ausgegangen, dass keine anderen Prioritäten vorhanden sind, mit denen sowohl SimpleContract als auch entweder ein lokaler oder ein Remotedienst angegeben werden.
CREATE BROKER PRIORITY SimpleContractDefaultPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = ANY,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 7);
C.Festlegen einer Basisprioritätsebene für eine Datenbank
Definiert die Konversationsprioritäten für zwei bestimmte Dienste und definiert dann eine Konversationspriorität, die mit allen anderen Konversationsendpunkten übereinstimmt. Dadurch wird nicht die Standardpriorität ersetzt, die stets den Wert 5 aufweist, aber es wird die Anzahl von Elementen reduziert, denen die Standardpriorität zugewiesen ist.
CREATE BROKER PRIORITY [//Adventure-Works.com/Expenses/ClaimPriority]
FOR CONVERSATION
SET (CONTRACT_NAME = ANY,
LOCAL_SERVICE_NAME = //Adventure-Works.com/Expenses/ClaimService,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 9);
CREATE BROKER PRIORITY [//Adventure-Works.com/Expenses/ApprovalPriority]
FOR CONVERSATION
SET (CONTRACT_NAME = ANY,
LOCAL_SERVICE_NAME = //Adventure-Works.com/Expenses/ClaimService,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 6);
CREATE BROKER PRIORITY [//Adventure-Works.com/Expenses/BasePriority]
FOR CONVERSATION
SET (CONTRACT_NAME = ANY,
LOCAL_SERVICE_NAME = ANY,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 3);
D.Erstellen von drei Prioritätsebenen für einen Zieldienst mithilfe von Diensten
Unterstützt ein System, das drei Leistungsebenen bereitstellt: Gold (hoch), Silver (mittel) und Bronze (niedrig). Es gibt einen Vertrag, aber jede Ebene weist einen separaten Initiatordienst auf. Alle Initiatordienste kommunizieren mit einem zentralen Zieldienst.
CREATE BROKER PRIORITY GoldInitToTargetPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = GoldInitiatorService,
REMOTE_SERVICE_NAME = N'TargetService',
PRIORITY_LEVEL = 6);
CREATE BROKER PRIORITY GoldTargetToInitPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = TargetService,
REMOTE_SERVICE_NAME = N'GoldInitiatorService',
PRIORITY_LEVEL = 6);
CREATE BROKER PRIORITY SilverInitToTargetPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = SilverInitiatorService,
REMOTE_SERVICE_NAME = N'TargetService',
PRIORITY_LEVEL = 4);
CREATE BROKER PRIORITY SilverTargetToInitPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = TargetService,
REMOTE_SERVICE_NAME = N'SilverInitiatorService',
PRIORITY_LEVEL = 4);
CREATE BROKER PRIORITY BronzeInitToTargetPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = BronzeInitiatorService,
REMOTE_SERVICE_NAME = N'TargetService',
PRIORITY_LEVEL = 2);
CREATE BROKER PRIORITY BronzeTargetToInitPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = TargetService,
REMOTE_SERVICE_NAME = N'BronzeInitiatorService',
PRIORITY_LEVEL = 2);
E.Erstellen von drei Prioritätsebenen für mehrere Dienste mithilfe von Verträgen
Unterstützt ein System, das drei Leistungsebenen bereitstellt: Gold (hoch), Silver (mittel) und Bronze (niedrig). Jede Ebene weist einen separaten Vertrag auf. Diese Prioritäten werden für alle Dienste übernommen, auf die von Konversationen verwiesen wird, die die Verträge verwenden.
CREATE BROKER PRIORITY GoldPriority
FOR CONVERSATION
SET (CONTRACT_NAME = GoldContract,
LOCAL_SERVICE_NAME = ANY,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 6);
CREATE BROKER PRIORITY SilverPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SilverContract,
LOCAL_SERVICE_NAME = ANY,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 4);
CREATE BROKER PRIORITY BronzePriority
FOR CONVERSATION
SET (CONTRACT_NAME = BronzeContract,
LOCAL_SERVICE_NAME = ANY,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 2);
Siehe auch
Verweis
ALTER BROKER PRIORITY (Transact-SQL)
BEGIN DIALOG CONVERSATION (Transact-SQL)
CREATE CONTRACT (Transact-SQL)
DROP BROKER PRIORITY (Transact-SQL)