CREATE BROKER PRIORITY (Transact-SQL)

Platí na:SQL ServerAzureSQL Managed Instance

Definuje úroveň priority a sadu kritérií pro určení, kterým konverzacím Service Broker přiřadit úroveň priority. Úroveň priority je přiřazena jakémukoli konverzačnímu koncovému zařízení, které používá stejnou kombinaci kontraktů a služeb specifikovaných v prioritě konverzace. Priority se pohybují od 1 (nízká) do 10 (vysoká). Výchozí hodnota je 5.

Transact-SQL konvence syntaxe

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

Priorita konverzace
Specifikuje název priority této konverzace. Název musí být jedinečný v aktuální databázi a musí odpovídat pravidlům pro identifikátory Database Engine.

SET
Specifikuje kritéria pro určení, zda se priorita konverzace vztahuje na konverzaci. Pokud je specifikován, musí obsahovat SET alespoň jedno kritérium: CONTRACT_NAME, LOCAL_SERVICE_NAME, REMOTE_SERVICE_NAME nebo PRIORITY_LEVEL. Pokud SET není specifikováno, výchozí hodnoty jsou nastaveny pro všechna tři kritéria.

CONTRACT_NAME = {JménosmlouvyJakoukoliv | }
Specifikuje název smlouvy, která má být použita jako kritérium pro určení, zda se priorita konverzace vztahuje na konverzaci. ContractName je identifikátor Database Engine a musí uvádět název smlouvy v aktuální databázi.

ContractName
Specifikuje, že priorita konverzace může být aplikována pouze na konverzace, kde příkaz BEGIN DIALOG, který konverzaci zahájil, byl uveden NA CONTRACTContractName.

Libovolný
Specifikuje, že priorita konverzace může být aplikována na jakoukoli konverzaci, bez ohledu na to, kterou smlouvu používá.

Výchozí je JAKÉKOLI.

LOCAL_SERVICE_NAME = {LocalServiceName | ANY}
Specifikuje název služby, která má být použita jako kritérium pro určení, zda se priorita konverzace vztahuje na konverzační endpoint.

LocalServiceName je identifikátor Database Engine. Musí specifikovat název služby v aktuální databázi.

LocalServiceName
Specifikuje, že priorita konverzace může být aplikována na následující:

  • Jakýkoli koncový bod konverzace iniciátora, jehož název služby iniciátora odpovídá LocalServiceName.

  • Jakýkoli cílový konverzační endpoint, jehož cílové jméno služby odpovídá LocalServiceName.

Libovolný

  • Specifikuje, že priorita konverzace může být aplikována na jakýkoli konverzační endpoint, bez ohledu na název lokální služby používané tímto koncovým bodem.

Výchozí je JAKÉKOLI.

REMOTE_SERVICE_NAME = {'RemoteServiceName' | NĚJAKÉ}
Specifikuje název služby, která má být použita jako kritérium pro určení, zda se priorita konverzace vztahuje na konverzační endpoint.

RemoteServiceName je doslovný typ nvarchar(256). Service Broker používá porovnání bajtů po bajtech, aby odpovídal řetězci RemoteServiceName . Srovnání je citlivé na velikost a písmeno a nezohledňuje aktuální kolaci. Cílová služba může být v aktuální instanci Database Engine, nebo v vzdálené instanci Database Engine.

'RemoteServiceName'
Specifikuje, že priorita konverzace může být aplikována na následující:

  • Každý koncový bod iniciátorové konverzace, jehož cílové jméno služby odpovídá RemoteServiceName.

  • Každý cílový konverzační endpoint, jehož přidružené iniciátorské jméno služby odpovídá RemoteServiceName.

Libovolný
Specifikuje, že priorita konverzace může být aplikována na jakýkoli konverzační endpoint, bez ohledu na název vzdálené služby spojené s tímto koncovým bodem.

Výchozí je JAKÉKOLI.

PRIORITY_LEVEL = { PriorityValue | DEFAULT }
Specifikuje prioritu přiřazení jakéhokoli konverzačního koncového bodu, který využívá kontrakty a služby uvedené v prioritě konverzace. PriorityValue musí být celočíselný literál od 1 (s nejnižší prioritou) do 10 (nejvyšší priorita). Výchozí hodnota je 5.

Remarks

Service Broker přiřazuje úrovně priorit konverzačním endpointům. Priority určují priority operací spojených s koncovým bodem. Každá konverzace má dva koncové body konverzace:

  • Koncový bod konverzace iniciátoru přidruží jednu stranu konverzace ke službě iniciátoru a frontě iniciátoru. Iniciátorský konverzační endpoint se vytvoří při spuštění příkazu BEGIN DIALOG. Operace spojené s koncovým bodem konverzace iniciátora zahrnují:

    • Odesílá z iniciátorské služby.

    • Přijímá z iniciátorové fronty.

    • Získávám další konverzační skupinu z iniciátorské fronty.

  • Koncový bod cílové konverzace přidruží druhou stranu konverzace k cílové službě a frontě. Cílový konverzační endpoint vzniká, když je konverzace použita k odeslání zprávy do cílové fronty. Operace spojené s cílovým konverzačním bodem zahrnují:

    • Přijímá z cílové fronty.

    • Odesílá z cílové služby.

    • Získávám další konverzační skupinu z cílové fronty.

Service Broker při vytváření koncových bodů konverzace přiřazuje úrovně priority konverzací. Koncový bod konverzace zachová úroveň priority, dokud konverzace nekončí. Nové priority nebo změny stávajících priorit se nevztahují na stávající rozhovory.

Service Broker přiřazuje konverzačnímu endpointu prioritu na úrovni priority konverzace, jehož kritéria smlouvy a služeb nejlépe odpovídají vlastnostem endpointu. Následující tabulka uvádí prioritu shody:

Smlouva o provozu Provoz místní dopravy Provoz dálkové služby
ContractName LocalServiceName RemoteServiceName
ContractName LocalServiceName Libovolný
ContractName Libovolný RemoteServiceName
ContractName Libovolný Libovolný
Libovolný LocalServiceName RemoteServiceName
Libovolný LocalServiceName Libovolný
Libovolný Libovolný RemoteServiceName
Libovolný Libovolný Libovolný

Service Broker nejprve hledá prioritu, jejíž specifikovaná smlouva, lokální služba a vzdálená služba odpovídají těm, které provoz používá. Pokud se nenajde, Service Broker hledá prioritu s kontraktem a lokální službou, která odpovídá těm, které provoz používá, a kde byla vzdálená služba specifikována jako JAKÉKOLI. Toto platí pro všechny varianty uvedené v tabulce předností. Pokud se nenajde shoda, operace je přiřazena výchozí priorita 5.

Service Broker nezávisle přiřazuje úroveň priority každému konverzačnímu koncovému místu. Pokud chcete, aby služba Service Broker přiřadil úrovně priority iniciátoru i cílovému koncovému bodu konverzace, musíte zajistit, aby oba koncové body byly pokryty prioritami konverzace. Pokud jsou iniciátor a koncové body cílové konverzace v samostatných databázích, musíte v každé databázi vytvořit priority konverzací. Obvykle je pro oba konverzační koncovky nastavena stejná úroveň priority, ale můžete nastavit různé úrovně priority.

Úrovně priority se vždy použijí na operace, které přijímají zprávy nebo identifikátory skupin konverzací z fronty. Úrovně priorit se také aplikují při přenosu zpráv z jedné instance Database Engine do druhé.

Úrovně priority se při přenosu zpráv nepoužívají:

  • Z databáze, kde je možnost HONOR_BROKER_PRIORITY databáze nastavena na VYPNUTO. Další informace naleznete v tématu ALTER DATABASE SET Možnosti (Transact-SQL).

  • Mezi službami ve stejné instanci Database Engine.

  • Všechny operace Service Broker v databázi mají výchozí priority 5, pokud v databázi nebyly vytvořeny žádné priority konverzace.

Permissions

Oprávnění pro vytvoření priority konverzace je výchozí pro členy db_ddladmin nebo db_owner pevných databázových rolí a pro pevného správce systému. Vyžaduje oprávnění ALTER pro databázi.

Examples

A. Přiřazení úrovně priority oběma směrům konverzace.

Tyto dvě priority konverzace zajišťují, že všechny operace používající SimpleContract mezi TargetService a jsou InitiatorAService přiřazeny k prioritě úrovně 3.

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. Stanovení úrovně priority pro všechny konverzace, které používají smlouvu

Přiřazuje úroveň priority všem 7 operacím, které používají kontrakt s názvem SimpleContract. To předpokládá, že neexistují žádné jiné priority, které by určovaly obě SimpleContract a buď lokální, nebo vzdálenou službu.

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

C. Nastavení základní priority pro databázi.

Definuje priority konverzace pro dvě konkrétní služby a poté definuje prioritu konverzace, která bude odpovídat všem ostatním konverzačním endpointům. Tím se nenahrazuje výchozí priorita, která je vždy 5, ale minimalizuje počet položek, které jsou přiřazeny jako výchozí.

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. Vytvoření tří prioritních úrovní pro cílovou službu pomocí služeb

Podporuje systém, který poskytuje tři úrovně výkonu: Zlatá (vysoká), Stříbrná (střední) a Bronzová (nízká). Existuje jedna smlouva, ale každá úroveň má samostatnou iniciátorskou službu. Všechny iniciátorské služby komunikují s centrální cílovou službou.

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. Vytvoření tří prioritních úrovní pro více služeb pomocí smluv

Podporuje systém, který poskytuje tři úrovně výkonu: Zlatá (vysoká), Stříbrná (střední) a Bronzová (nízká). Každá úroveň má samostatnou smlouvu. Tyto priority platí pro všechny služby, na které se odkazuje v konverzacích využívajících smlouvy.

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

Viz také

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)