Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Managed Instance
Konversationsprioriteringar är en uppsättning användardefinierade regler, som var och en anger en prioritetsnivå och kriterierna för att avgöra vilka Service Broker-konversationer som ska tilldela prioritetsnivån. Meddelanden från konversationer med hög prioritet skickas eller tas vanligtvis emot före meddelanden från konversationer med låg prioritet.
Användning av konversationsprioriteringar
Konversationsprioriteringar kan användas för att göra följande:
Identifiera konversationer som har företräde framför andra.
Stöd för olika tjänstnivåer, där meddelanden från kunder som betalar högre priser skickas före meddelanden från kunder som betalar lägre priser.
Gynna kundförfrågningar framför bakgrundsaktiviteter. Till exempel bör nya kundregistreringar ha högre prioritet än att skicka sammanfattningar av affärstransaktioner till ett informationslager.
Konversationsprioriteringar och konverteringsslutpunkter
Konversationsprioriteringar skapas i varje databas med hjälp av -instruktionen CREATE BROKER PRIORITY . Varje konversationsprioritet definierar följande:
Ett namn för konversationsprioriteten.
En prioritetsnivå för att tilldela Service Broker-konversationer. Nivåerna anges som heltal från 1 (lägsta) till 10 (högsta). Standardvärdet är 5.
De kriterier som avgör vilka konversationer prioritetsnivån gäller för följande:
- Ett kontraktnamn, eller
ANY - Ett lokalt tjänstnamn, eller
ANY - Ett fjärrtjänstnamn, eller
ANY
- Ett kontraktnamn, eller
Service Broker tilldelar prioritetsnivåerna till konversationsslutpunkter när slutpunkterna skapas. Varje konversation har två konversationsslutpunkter:
Initierarens konversationsslutpunkt associerar ena sidan av konversationen med initierartjänsten och initierarkön. Konversationsslutpunkten för initieraren skapas när -instruktionen
BEGIN DIALOGkörs. De åtgärder som är associerade med konversationsslutpunkten för initieraren omfattar följande:- Skickar från initierartjänsten
- Tar emot från initierarkön
- Hämta nästa konversationsgrupp från initierarkön
Slutpunkten för målkonversation associerar den andra sidan av konversationen med måltjänsten och kön. Slutpunkten för målkonversation skapas när det första meddelandet från initieraren placeras i målkön. De åtgärder som är associerade med slutpunkten för målkonversationen innehåller följande:
- Tar emot från målkön
- Skickar från måltjänsten
- Hämta nästa konversationsgrupp från målkön
Vilken tjänst som utvärderas som en lokal tjänst eller fjärrtjänst beror på typen av konversationsslutpunkt:
- För initierarens konversationsslutpunkt är initierartjänsten den lokala tjänsten och måltjänsten är fjärrtjänsten.
- För målkonversationens slutpunkt är måltjänsten den lokala tjänsten och initierartjänsten är fjärrtjänsten.
Så här tilldelar Service Broker prioritetsnivåer
Service Broker tilldelar konversationsprioritetsnivåer när konversationsslutpunkter skapas. Konversationsslutpunkten behåller prioritetsnivån tills konversationen avslutas. Nya prioriteringar eller ändringar av befintliga prioriteringar tillämpas inte på befintliga konversationer.
Service Broker tilldelar konversationsslutpunkten prioritetsnivån från konversationsprioriteten vars kontrakt- och tjänstvillkor bäst matchar slutpunktsegenskaperna. I följande tabell visas matchningspriorensen:
| Slutpunktskontrakt | Lokal slutpunktstjänst | Fjärrtjänst för slutpunkt |
|---|---|---|
| Prioritetskontrakt | Lokal prioritetstjänst | Fjärrtjänst för prioritet |
| Prioritetskontrakt | Lokal prioritetstjänst | ANY |
| Prioritetskontrakt | ANY |
Fjärrtjänst för prioritet |
| Prioritetskontrakt | ANY |
ANY |
ANY |
Lokal prioritetstjänst | Fjärrtjänst för prioritet |
ANY |
Lokal prioritetstjänst | ANY |
ANY |
ANY |
Fjärrtjänst för prioritet |
ANY |
ANY |
ANY |
Service Broker söker först efter en prioritet vars angivna kontrakt, lokala tjänst och fjärrtjänst matchar de som används av konversationsslutpunkten. Om en inte hittas söker Service Broker efter en prioritet med ett kontrakt och en lokal tjänst som matchar dem som används av slutpunkten och där fjärrtjänsten angavs som ANY. Detta fortsätter för alla varianter som anges i prioritetstabellen. Om ingen matchning hittas tilldelas slutpunkten standardprioriteten 5.
Kommunikationsprotokollen för Service Broker överför inte prioritetsnivåer mellan konversationsslutpunkter. Service Broker tilldelar oberoende en prioritetsnivå till varje slutpunkt. Om du vill att Service Broker ska tilldela prioritetsnivåer till både initieraren och målkonversationens slutpunkter måste du se till att båda slutpunkterna omfattas av konversationsprioriteringar. Om initieraren och målkonversationens slutpunkter finns i separata databaser måste du skapa konversationsprioriteringar i varje databas. Om initieraren och målslutpunkterna finns i samma databas:
Du kan täcka båda konversationsslutpunkterna med hjälp av en konversationsprioritet som anger kontraktnamnet som används av konversationen och
ANYför både lokala och fjärranslutna tjänstnamn.Du kan täcka varje konversationsslutpunkt separat med hjälp av två konversationsprioriteringar:
En konversation för initierarens slutpunkt som anger initierarens tjänstnamn för
LOCAL_SERVICE_NAMEoch måltjänstnamnet förREMOTE_SERVICE_NAME.En konversation för målslutpunkten som anger måltjänstens namn för
LOCAL_SERVICE_NAMEoch namnet på initierarens tjänst förREMOTE_SERVICE_NAME.
Samma prioritetsnivå anges vanligtvis för båda konversationsslutpunkterna för en konversation. Även om du kan ange olika prioritetsnivåer för varje slutpunkt betyder det inte att meddelanden skickas snabbare i en riktning än den andra. Meddelanden skickas från en konversationsslutpunkt och tas emot på den andra slutpunkten. Därför påverkas varje meddelandeöverföring av de prioritetsnivåer som tilldelats båda slutpunkterna. Du kan till exempel konfigurera en konversation så att initierarens konversationsslutpunkt har prioritetsnivå 10 och målslutpunkten har prioritetsnivå 1. I det här fallet:
Meddelanden som skickas från initierartjänsten med hjälp av prioritetsnivå 10 tas emot från målkön med prioritetsnivå 1.
Meddelanden som skickas från måltjänsten med hjälp av prioritetsnivå 1 tas emot från initierarkön med prioritetsnivå 10.
En konversationsgrupp tilldelas samma prioritetsnivå som den högsta prioritetsnivå som tilldelats alla konversationer där följande är sant:
- Konversationen är medlem i gruppen.
- Konversationen har för närvarande meddelanden i tjänstkön.
Alla konversationsslutpunkter i en databas tilldelas standardprioriteter på 5 om inga konversationsprioriteringar har skapats i databasen.
Konversationsprioriteringar påverkar inte vidarebefordran av meddelanden, som alltid fungerar på standardprioritetsnivån 5.
Exempel på konversationsprioritet
Överväg ett system med följande:
En
InitiatorDBsom innehåller enInitiatorServiceochInitiatorQueue.A
TargetDBsom innehåller enTargetServiceochTargetQueue.Ett kontrakt med namnet
SimpleContract, som anger vilka somRequestMessagesskickas frånInitiatorServicetillTargetService. Den anger också somReplyMessagesskickas frånTargetServicetillInitiatorService.
Det här skriptet anger prioritetsnivån för initierarens konversationsslutpunkt och dess associerade åtgärder:
- Från
SENDRequestMessagefrånInitiatorServicetillTargetQueue -
RECEIVEFrånReplyMessageInitiatorQueue
USE InitiatorDB;
GO
CREATE BROKER PRIORITY InitiatorToTargetPriority FOR CONVERSATION
SET
(
CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = InitiatorService,
REMOTE_SERVICE_NAME = N'TargetService',
PRIORITY_LEVEL = 3
);
GO
Det här skriptet anger prioritetsnivån för målkonversationens slutpunkt och dess associerade åtgärder:
-
RECEIVEFrånRequestMessageTargetQueue - Från
SENDReplyMessagefrånTargetServicetillInitiatorQueue
USE TargetDB;
GO
CREATE BROKER PRIORITY TargetToInitiatorPriority FOR CONVERSATION
SET
(
CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = TargetService,
REMOTE_SERVICE_NAME = N'InitiatorService',
PRIORITY_LEVEL = 3
);
GO
Hur prioriteringar fungerar
Vanligtvis skickar och tar Service Broker emot meddelanden för konversationer med hög prioritet innan du skickar och tar emot meddelanden för konversationer med låg prioritet. Meddelanden från konversationer med hög prioritet tillbringar mindre tid i köer än meddelanden från konversationer med låg prioritet.
Prioritetsnivåer för mottagning
Prioritetsnivåer tillämpas alltid på åtgärder som tar emot meddelanden eller konversationsgruppidentifierare från en kö.
Prioritetsnivå är en av de faktorer som avgör vilken uppsättning meddelanden som hämtas av en RECEIVE och i vilken ordning meddelandena hämtas:
Varje
RECEIVEinstruktion hämtar alltid meddelanden från en konversationsgrupp:En
RECEIVEsom inte har någonWHEREsats hämtar meddelanden som tillhör den upplåst konversationsgrupp med högst prioritet som har meddelanden i kön.En
RECEIVEsom har enWHERE-sats hämtar meddelandena för konversationsgruppen som anges iWHERE-satsen.
I en konversationsgrupp
RECEIVEhämtar meddelanden beroende på prioritetsnivån för konversationerna i gruppen. Alla meddelanden från konversationen med den högsta prioritetsnivån hämtas först, sedan meddelandena för konversationen med den näst högsta prioritetsnivån och så vidare.I en konversation hämtas meddelandena i samma sekvens som de skickades.
GET CONVERSATION GROUP returnerar gruppen med den högsta prioritetsnivån från uppsättningen olåst grupper som har meddelanden i kön.
Överföringsprioritetsnivåer
Meddelanden i överföringsköerna för en instans överförs i sekvens baserat på:
- Prioritetsnivån för deras associerade konversationsslutpunkt.
- Inom prioritetsnivå skickas sekvensen i konversationen.
Service Broker samordnar prioritetsnivåer i alla överföringsköer i en instans av databasmotorn. Service Broker överför först meddelanden från prioritet 10-konversationer i alla överföringsköer, sedan meddelanden från prioritet 9-konversationer och så vidare.
Den relativa skillnaden i meddelandeprestanda ökar med skillnaden i prioritetsnivåer. I ett system som använder två intilliggande prioritetsnivåer, till exempel 9 och 10, har meddelandena med högre prioritetsnivå en liten prestandafördel. I ett system som använder två vitt skilda prioritetsnivåer, till exempel 1 och 10, har meddelanden med högre prioritet en större prestandafördel. I system som använder flera prioritetsnivåer allokeras merparten av bearbetningen till de översta 2 eller 3 prioritetsnivåerna.
Prioritetsnivåer som anges i konversationsprioriteringar tillämpas endast på meddelanden i överföringskö om databasalternativet HONOR_BROKER_PRIORITY är inställt på ON. Om HONOR_BROKER_PRIORITY är inställt på OFFskickas alla meddelanden som placeras i överföringskö för databasen med standardprioritetsnivån 5. När det visas med visar sys.transmission_queuemeddelandet fortfarande den prioritetsnivå som det tog emot från slutpunkten, men standardprioritetsnivån används för att överföra meddelandet.
Eftersom prioritetsnivåer tillämpas på meddelanden i överföringskö påverkar de vanligtvis inte meddelanden som skickas mellan tjänster i samma instans av databasmotorn. Meddelanden som skickas till en tjänst i samma instans placeras direkt i tjänstens kö utan att gå igenom en överföringskö. Vissa villkor kan göra att lokala meddelanden placeras i överföringskö, till exempel vissa typer av fel eller att målkön är inaktiv. Om meddelandet lagras i överföringskö tillämpas den relevanta prioritetsnivån.
Meddelanden och meddelandefragment kan skickas ur prioritetsordning:
Service Broker skickar meddelanden mellan instanser av databasmotorn med hjälp av block med meddelandefragment. Om det finns flera meddelandefragment med olika prioriteter som är redo att skickas till en instans kan Service Broker skicka alla fragment i ett block. Vissa fragment i slutet av blocket kan ha en lägre prioritetsnivå än meddelandefragment som väntar på överföring till en annan instans.
Service Broker innehåller en mekanism för förebyggande av svält som hjälper till att hindra ett stort antal meddelanden med hög prioritet från att blockera meddelanden med låg prioritet. Ett meddelande med låg prioritet som har väntat länge kan skickas även om det finns meddelanden med högre prioritet i kön.
Även om enskilda meddelanden eller meddelandefragment kan skickas ur prioritetsordning, bör effekterna vara små när de beaktas i många meddelandesändningar.
Relaterat innehåll
- ÄNDRA BROKER PRIORITY (Transact-SQL)
- ALTER DATABASE-inställningar (Transact-SQL)
- STARTA DIALOGKONVERSATION (Transact-SQL)
- SKAPA BROKER PRIORITY (Transact-SQL)
- SKAPA KÖ (Transact-SQL)
- SKAPA TJÄNST (Transact-SQL)
- GET CONVERSATION GROUP (Transact-SQL)
- TA EMOT (Transact-SQL)
- SEND (Transact-SQL)
- sys.conversation_priorities (Transact-SQL)
- sys.transmission_queue (Transact-SQL)
- Konversationsarkitektur
- Tjänstarkitektur
- Routning och nätverk för Service Broker