CREATE BROKER PRIORITY (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL Managed Instance

Definieert een prioriteitsniveau en de reeks criteria om te bepalen aan welke Service Broker-gesprekken het prioriteitsniveau moeten worden toegekend. Het prioriteitsniveau wordt toegewezen aan elk gesprekseindpunt dat dezelfde combinatie van contracten en diensten gebruikt als gespecificeerd in de gespreksprioriteit. Prioriteiten variëren in waarde van 1 (laag) tot 10 (hoog). De standaardwaarde is 5.

Transact-SQL syntaxis-conventies

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 } ]  
       )  
]  
[;]  
  

Arguments

ConversationPriorityName
Specificeert de naam voor deze gespreksprioriteit. De naam moet uniek zijn in de huidige database en moet voldoen aan de regels voor Database Engine-identificaties.

SET
Specificeert de criteria om te bepalen of de prioriteit van het gesprek geldt voor een gesprek. Indien gespecificeerd, SET moet ten minste één criterium bevatten: CONTRACT_NAME, LOCAL_SERVICE_NAME, REMOTE_SERVICE_NAME of PRIORITY_LEVEL. Als SET niet wordt gespecificeerd, worden de standaardwaarden voor alle drie de criteria vastgesteld.

CONTRACT_NAME = {ContractName | ANY}
Specificeert de naam van een contract die als criterium moet worden gebruikt om te bepalen of de prioriteit van het gesprek geldt voor een gesprek. ContractName is een Database Engine-identificatie en moet de naam van een contract in de huidige database specificeren.

ContractName
Specificeert dat de gespreksprioriteit alleen kan worden toegepast op gesprekken waarbij de BEGIN DIALOG-instructie die het gesprek begon ON CONTRACTContractName specificeerde.

ANY
Specificeert dat de gespreksprioriteit op elk gesprek kan worden toegepast, ongeacht welk contract het gebruikt.

De standaard is ELKE KEUZE.

LOCAL_SERVICE_NAME = {localServiceName | ANY}
Specificeert de naam van een dienst die als criterium moet worden gebruikt om te bepalen of de conversatieprioriteit van toepassing is op een conversatie-endpoint.

LocalServiceName is een Database Engine-identificatie. Het moet de naam van een dienst in de huidige database specificeren.

LocalServiceName
Specificeert dat de conversatieprioriteit kan worden toegepast op de volgende personen:

  • Elk initiator-conversatie-eindpunt waarvan de initiatorservicenaam overeenkomt met LocalServiceName.

  • Elk doelgespreks-eindpunt waarvan de naam van de doelservice overeenkomt met LocalServiceName.

ANY

  • Specificeert dat de conversatieprioriteit kan worden toegepast op elk gespreks-eindpunt, ongeacht de naam van de lokale dienst die door het eindpunt wordt gebruikt.

De standaard is ELKE KEUZE.

REMOTE_SERVICE_NAME = {'RemoteServiceName' | ANY}
Specificeert de naam van een dienst die als criterium moet worden gebruikt om te bepalen of de conversatieprioriteit van toepassing is op een conversatie-endpoint.

RemoteServiceName is een letterlijke vorm van het type nvarchar(256). Service Broker gebruikt een byte-voor-byte vergelijking om de RemoteServiceName-string te matchen. De vergelijking is hoofdlettergevoelig en houdt geen rekening met de huidige collatie. De doelservice kan zich bevinden in de huidige instantie van de Database Engine, of in een externe instantie van de Database Engine.

'RemoteServiceName'
Specificeert dat de conversatieprioriteit kan worden toegepast op de volgende personen:

  • Elk initiatorgesprekseindpunt waarvan de bijbehorende doelservicenaam overeenkomt met RemoteServiceName.

  • Elk doelconversatie-eindpunt waarvan de bijbehorende initiator-servicenaam overeenkomt met RemoteServiceName.

ANY
Specificeert dat de conversatieprioriteit op elk conversatie-eindpunt kan worden toegepast, ongeacht de naam van de externe dienst die aan het eindpunt is gekoppeld.

De standaard is ELKE KEUZE.

PRIORITY_LEVEL = { PriorityValue | DEFAULT }
Geeft de prioriteit aan om elk gesprekseindpunt toe te wijzen dat de contracten en diensten gebruikt die in de gespreksprioriteit zijn gespecificeerd. PriorityValue moet een geheel getal zijn van 1 (laagste prioriteit) tot 10 (hoogste prioriteit). De standaardwaarde is 5.

Remarks

Service Broker kent prioriteitsniveaus toe aan gesprekseindpunten. De prioriteitsniveaus bepalen de prioriteit van de bewerkingen die aan het eindpunt horen. Elk gesprek heeft twee gesprekseindpunten:

  • Het gesprekseindpunt van de initiator koppelt één kant van het gesprek aan de initiatorservice en initiatorwachtrij. Het initiatorgespreks-eindpunt wordt aangemaakt wanneer de BEGIN DIALOG-instructie wordt uitgevoerd. De bewerkingen die verbonden zijn aan het initiatorgesprekseindpunt omvatten:

    • Verzendt vanaf de initiatorservice.

    • Ontvangt van de initiatorwachtrij.

    • De volgende gespreksgroep uit de initiator-wachtrij halen.

  • Het eindpunt van het doelgesprek koppelt de andere kant van het gesprek aan de doelservice en wachtrij. Het doelconversatie-eindpunt wordt aangemaakt wanneer het gesprek wordt gebruikt om een bericht naar de doelwachtrij te sturen. De bewerkingen die verbonden zijn aan het doelgesprekseindpunt omvatten:

    • Ontvangt van de doelwachtrij.

    • Zendingen vanaf de doeldienst.

    • De volgende gespreksgroep uit de doelwachtrij halen.

Service Broker wijst prioriteitsniveaus voor gesprekken toe wanneer gesprekseindpunten worden gemaakt. Het gesprekseindpunt behoudt het prioriteitsniveau totdat het gesprek eindigt. Nieuwe prioriteiten of veranderingen in bestaande prioriteiten worden niet toegepast op bestaande gesprekken.

Service Broker wijst een gesprekseindpunt het prioriteitsniveau toe vanuit de gespreksprioriteit waarvan de contract- en dienstencriteria het beste overeenkomen met de eigenschappen van het eindpunt. In de volgende tabel ziet u de prioriteit van de overeenkomst:

Exploitatiecontract Exploitatie lokale dienst Bediening op afstand
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 zoekt eerst naar een prioriteit waarvan het gespecificeerde contract, lokale dienst en remote service overeenkomt met die welke de operatie gebruikt. Als er geen wordt gevonden, zoekt Service Broker naar een prioriteit met een contract en lokale dienst die overeenkomt met die van de operatie, en waarbij de externe dienst als ELKE is gespecificeerd. Dit gaat door voor alle variaties die in de prioriteitstabel staan. Als er geen match wordt gevonden, krijgt de bewerking de standaardprioriteit van 5 toegewezen.

Service Broker wijst onafhankelijk een prioriteitsniveau toe aan elk gesprekseindpunt. Als u Service Broker prioriteitsniveaus wilt toewijzen aan zowel de initiator als het doelgesprekseindpunt, moet u ervoor zorgen dat beide eindpunten worden gedekt door gespreksprioriteiten. Als de initiator- en doelgesprekseindpunten zich in afzonderlijke databases bevinden, moet u gespreksprioriteiten maken in elke database. Meestal wordt hetzelfde prioriteitsniveau gespecificeerd voor beide conversatie-eindpunten van een gesprek, maar je kunt ook verschillende prioriteitsniveaus opgeven.

Prioriteitsniveaus worden altijd toegepast op bewerkingen die berichten of gespreksgroep-id's van een wachtrij ontvangen. Prioriteitsniveaus worden ook toegepast bij het verzenden van berichten van de ene instantie van de Database Engine naar een andere.

Prioriteitsniveaus worden niet gebruikt bij het verzenden van berichten:

  • Vanuit een database waar de optie HONOR_BROKER_PRIORITY database op UIT staat. Zie ALTER DATABASE SET Opties (Transact-SQL)voor meer informatie.

  • Tussen services in dezelfde instantie van de Database Engine.

  • Alle Service Broker-operaties in een database krijgen standaardprioriteiten van 5 toegewezen als er geen gespreksprioriteiten in de database zijn aangemaakt.

Permissions

Toestemming voor het aanmaken van een gespreksprioriteit is standaard leden van de db_ddladmin of db_owner vaste databaserollen, en de sysadmin-vaste serverrol. Vereist ALTER-machtigingen voor de database.

Examples

A. Een prioriteitsniveau toekennen aan beide richtingen van een gesprek.

Deze twee gespreksprioriteiten zorgen ervoor dat alle bewerkingen die tussen TargetService en de InitiatorAService worden gebruiktSimpleContract, prioriteitsniveau 3 krijgen.

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. Het prioriteitsniveau instellen voor alle gesprekken die een contract gebruiken

Kent een prioriteitsniveau toe 7 aan alle bewerkingen die een contract gebruiken genaamd SimpleContract. Dit gaat ervan uit dat er geen andere prioriteiten zijn die beide SimpleContract specificeren, evenals een lokale of een externe dienst.

CREATE BROKER PRIORITY SimpleContractDefaultPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = ANY,  
         REMOTE_SERVICE_NAME = ANY,  
         PRIORITY_LEVEL = 7);  

C. Het instellen van een basisprioriteitsniveau voor een database.

Definieert gesprekprioriteiten voor twee specifieke diensten, en vervolgens een gespreksprioriteit die overeenkomt met alle andere gesprekseindpunten. Dit vervangt de standaardprioriteit niet, die altijd 5 is, maar minimaliseert wel het aantal items dat als standaard is toegewezen.

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. Het creëren van drie prioriteitsniveaus voor een doeldienst door gebruik te maken van services

Ondersteunt een systeem dat drie prestatieniveaus biedt: Goud (hoog), Zilver (middel) en Brons (laag). Er is één contract, maar elk niveau heeft een aparte initiatordienst. Alle initiatordiensten communiceren met een centrale doeldienst.

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. Het creëren van drie prioriteitsniveaus voor meerdere diensten met behulp van contracten

Ondersteunt een systeem dat drie prestatieniveaus biedt: Goud (hoog), Zilver (middel) en Brons (laag). Elk level heeft een apart contract. Deze prioriteiten gelden voor alle diensten die worden genoemd in gesprekken die gebruikmaken van de contracten.

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);  

Zie ook

ALTER BROKER PRIORITY (Transact-SQL)
BEGIN DIALOG CONVERSATION (Transact-SQL)
CREATE CONTRACT (Transact-SQL)
CREATE QUEUE (Transact-SQL)
CREATE SERVICE (Transact-SQL)
DROP BROKER PRIORITY (Transact-SQL)
GET CONVERSATION GROUP (Transact-SQL)
RECEIVE (Transact-SQL)
SEND (Transact-SQL)
sys.conversation_priorities (Transact-SQL)