CREATE BROKER PRIORITY (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL Managed Instance

Meghatározza a prioritási szintet és a kritériumok rendszerét, amelyek meghatározzák, hogy mely szolgáltatási bróker beszélgetésekhez kell kijelölni az elsőbbségi szintet. A prioritási szintet bármely olyan beszélgetés végponthoz rendelik, amely ugyanazt a szerződés- és szolgáltatáskombinációt használja, mint a beszélgetés prioritása. A prioritások értéke 1 (alacsony) és 10 (magas) között változik. Az alapértelmezett érték 5.

Transact-SQL szintaxis konvenciók

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

ConversationPriorityNév
Megadja ennek a beszélgetésprioritásnak a nevét. A névnek egyedinek kell lennie a jelenlegi adatbázisban, és meg kell felelnie a Database Engine azonosítók szabályainak.

SET
Meghatározza azokat a kritériumokat, amelyek alapján a beszélgetés prioritása vonatkozik-e egy beszélgetésre. Ha meg van határozva, SET legalább egy kritériumot kell tartalmaznia: CONTRACT_NAME, LOCAL_SERVICE_NAME, REMOTE_SERVICE_NAME vagy PRIORITY_LEVEL. Ha SET nincs megadva, az alapértelmezett beállítások mind a három kritériumra vannak beállítva.

CONTRACT_NAME = {ContractName | ANY}
Megadja a szerződés nevét, amelyet kriteriumként kell használni annak meghatározásában, hogy a beszélgetés prioritása alkalmazható-e egy beszélgetésre. A ContractName egy Database Engine azonosítója, és meg kell határoznia egy szerződés nevét a jelenlegi adatbázisban.

Szerződésnév
Megadja, hogy a beszélgetés prioritása csak azokra a beszélgetésekre alkalmazható, ahol a beszélgetést indító BEGIN DIALOG utasítás CONTRACT ContractName címet.

BÁRMELY
Megadja, hogy a beszélgetés prioritása bármely beszélgetésre alkalmazható, függetlenül attól, hogy melyik szerződést használja.

Az alapértelmezett ANY.

LOCAL_SERVICE_NAME = {LocalServiceName | ANY}
Megadja egy szolgáltatás nevét, amelyet kritériumként kell használni annak meghatározására, hogy a beszélgetés prioritása alkalmazható-e egy beszélgetés végpontjára.

A LocalServiceName egy Database Engine azonosítója. Meg kell határoznia egy szolgáltatás nevét a jelenlegi adatbázisban.

LocalServiceName
Megadja, hogy a beszélgetés prioritása alkalmazható az alábbiakra:

  • Bármely indító beszélgetés végpont, amelynek indító szolgáltatás neve megegyezik a LocalServiceName névvel.

  • Bármely cél beszélgetési végpont, amelynek célszolgáltatási neve megegyezik a LocalServiceName-vel.

BÁRMELY

  • Megadja, hogy a beszélgetés prioritása bármely beszélgetési végpontra alkalmazható, függetlenül a végpont által használt helyi szolgáltatás nevetől.

Az alapértelmezett ANY.

REMOTE_SERVICE_NAME = {'RemoteServiceName' | ANY}
Megadja egy szolgáltatás nevét, amelyet kritériumként kell használni annak meghatározására, hogy a beszélgetés prioritása alkalmazható-e egy beszélgetés végpontjára.

A RemoteServiceName egy szó szerinti nvarchar(256) típus. A Service Broker bájtról bájtra összehasonlítást használ, hogy egyeztesse a RemoteServiceName sort. Az összehasonlítás kis- és kisméret-érzékeny, és nem veszi figyelembe a jelenlegi összeállítást. A célszolgáltatás lehet a Database Engine aktuális példányában, vagy a Database Engine távoli példányában.

'Távoli SzolgáltatásNév'
Megadja, hogy a beszélgetés prioritása alkalmazható az alábbiakra:

  • Bármely indító beszélgetés végpont, amelynek hozzárendelt célszolgáltatás neve egyezik a RemoteServiceName címmel.

  • Bármely cél beszélgetési végpont, amelynek hozzárendelt indító szolgáltatás neve megegyezik a RemoteServiceName-vel.

BÁRMELY
Meghatározza, hogy a beszélgetés prioritása bármely beszélgetési végpontra alkalmazható, függetlenül a végponthoz tartozó távoli szolgáltatás nevetől.

Az alapértelmezett ANY.

PRIORITY_LEVEL = { PriorityValue | DEFAULT }
Megadja a prioritást bármely beszélgetési végpont hozzárendeléséhez, amely a beszélgetés prioritásában megadott szerződéseket és szolgáltatásokat használja. A PriorityValue egy egész szám literálisnak kell lennie 1-től (legalacsonyabb prioritás) 10-ig (legmagasabb prioritás). Az alapértelmezett érték 5.

Remarks

A Service Broker prioritási szinteket rendel a beszélgetés végpontjainak. A prioritási szintek szabályozzák a végponthoz tartozó műveletek prioritását. Minden beszélgetés két beszélgetési végpontot tartalmaz:

  • A kezdeményező beszélgetési végpontja a beszélgetés egyik oldalát társítja a kezdeményező szolgáltatáshoz és a kezdeményezői üzenetsorhoz. Az indító beszélgetés végpontja akkor jön létre, amikor a BEGIN DIALOG utasítást futtatjuk. Az indító beszélgetés végpontjához tartozó műveletek a következők:

    • Küldés a kezdeményező szolgáltatástól.

    • A kezdeményező sorból fogadja.

    • A következő beszélgetőcsoportot a kezdeményező sorból kapni.

  • A célbeszélgetés végpontja a beszélgetés másik oldalát társítja a célszolgáltatáshoz és az üzenetsorhoz. A cél beszélgetés végpontját akkor hozza létre, amikor a beszélgetést az üzenet küldésére használják a cél sorba. A cél beszélgetés végpontjához tartozó műveletek a következők:

    • A célsorból fogad.

    • Küldött a célszolgáltatástól.

    • A következő beszélgetőcsoportot a cél sorból kapni.

A Service Broker a beszélgetési végpontok létrehozásakor hozzárendeli a beszélgetési prioritási szinteket. A beszélgetési végpont megőrzi a prioritási szintet, amíg a beszélgetés véget nem ér. Új prioritások vagy a meglévő prioritások módosításai nem kerülnek a meglévő beszélgetésekre.

A Service Broker egy beszélgetés végpontját a beszélgetés prioritásának szintjét rendeli ki attól a beszélgetés prioritásából, amelynek szerződése és szolgáltatási kritériumai a leginkább megfelelnek a végpont tulajdonságainak. Az alábbi táblázat a találati sorrendet mutatja:

Üzemeltetési szerződés Helyi szolgáltatás üzemeltetése Távoli szolgáltatás üzemeltetése
Szerződésnév LocalServiceName RemoteServiceName
Szerződésnév LocalServiceName BÁRMELY
Szerződésnév BÁRMELY RemoteServiceName
Szerződésnév BÁRMELY BÁRMELY
BÁRMELY LocalServiceName RemoteServiceName
BÁRMELY LocalServiceName BÁRMELY
BÁRMELY BÁRMELY RemoteServiceName
BÁRMELY BÁRMELY BÁRMELY

A Service Broker először olyan prioritást keres, amelynek meghatározott szerződése, helyi szolgáltatása és távoli szolgáltatása megegyezik a művelet által használt szolgáltatással. Ha nem talál ilyen megoldást, a Service Broker olyan prioritást keres, amely szerződéssel és helyi szolgáltatással egyezik azokkal a művelet által használt szolgáltatásokkal, és ahol a távoli szolgáltatás ANY-ként van megadva. Ez minden változatra is fennmarad, amelyek az elsőbbségi táblázatban szerepelnek. Ha nem talál egyezést, a műveletnek alapértelmezett 5-ös prioritása lesz.

A Service Broker függetlenül rendel prioritási szintet minden beszélgetés végpontjához. Ha azt szeretné, hogy a Service Broker prioritási szinteket rendeljen a kezdeményezőhöz és a cél beszélgetési végpontokhoz is, győződjön meg arról, hogy mindkét végpontot lefedik a beszélgetési prioritások. Ha a kezdeményező és a cél beszélgetési végpontok külön adatbázisokban találhatók, minden adatbázisban létre kell hoznia a beszélgetési prioritásokat. Általában ugyanaz a prioritási szint van mindkét beszélgetés végpontjához, de különböző prioritási szinteket is beállíthatsz.

A prioritási szintek mindig azokra a műveletekre lesznek alkalmazva, amelyek üzeneteket vagy beszélgetéscsoport-azonosítókat fogadnak egy üzenetsorból. Prioritási szinteket alkalmaznak akkor is, amikor üzeneteket továbbítanak az egyik Database Engine példányból a másikba.

Prioritási szinteket nem használnak üzenetek továbbításakor:

  • Egy olyan adatbázisból, ahol az HONOR_BROKER_PRIORITY adatbázis opció KIKAPCSOLVA. További információ: ALTER DATABASE SET Beállítások (Transact-SQL).

  • Ugyanabban a példányban lévő Database Engine szolgáltatásai között.

  • Az adatbázisban minden Service Broker műveletnek alapértelmezett 5 prioritása van, ha nem jött létre beszélgetés prioritásai az adatbázisban.

Permissions

A beszélgetés prioritásának létrehozásának engedélye alapértelmezés szerint a db_ddladmin vagy db_owner fix adatbázis szerepkör tagjai, valamint a rendszergazdi fix szerver szerepének a tagja. Alter engedély szükséges az adatbázishoz.

Examples

A. Prioritási szintet kell kijelölni mindkét beszélgetés irányába.

Ez a két beszélgetési prioritás biztosítja, hogy minden olyan művelet, amely az között SimpleContract és a között TargetService használInitiatorAService, 3. prioritási szintet kapjon.

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. Minden szerződést használó beszélgetés prioritási szintjének meghatározása

Minden olyan műveletnek, amely szerződést használ, az -7nek nevezett prioritási szintet SimpleContract rendel . Ez feltételezi, hogy nincs más prioritás, amely mindkettőt SimpleContract meghatározná, és nem egy helyi vagy távoli szolgáltatást.

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

C. Egy adatbázis alapprioritási szintjének beállítása.

Két konkrét szolgáltatás számára határozza meg a beszélgetés prioritásait, majd egy olyan beszélgetésprioritást határoz meg, amely megfelel az összes többi beszélgetés végpontjának. Ez nem helyettesíti az alapértelmezett prioritást, amely mindig 5, de minimalizálja az alapértelmezett elemek számát.

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. Három prioritási szint létrehozása egy célszolgáltatás számára szolgáltatások használatával

Támogatja egy olyan rendszert, amely három szintű teljesítményt nyújt: Arany (magas), Ezüst (közepes) és Bronz (alacsony). Van egy szerződés, de minden szintnek külön kezdeményező szolgáltatása van. Minden indító szolgáltatás kommunikál egy központi célszolgáltatással.

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. Három prioritási szint létrehozása több szolgáltatás számára szerződések alapján

Támogatja egy olyan rendszert, amely három szintű teljesítményt nyújt: Arany (magas), Ezüst (közepes) és Bronz (alacsony). Minden szintnek külön szerződése van. Ezek a prioritások minden olyan szolgáltatásra vonatkoznak, amelyekre a szerződéseket használó beszélgetések hivatkoznak.

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