Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL ServerAzure
SQL 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.
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)