Service Broker-routning

gäller för:SQL ServerAzure SQL Managed Instance

I den här artikeln beskrivs information om hur Service Broker dirigerar meddelanden. För en översikt, se Rutter.

För de flesta program fungerar en enkel metod för Service Broker-routning bra. I varje databas som innehåller en tjänst anger du en väg för de externa tjänster som tjänsten kommunicerar med. Service Broker tillhandahåller dock ett avancerat routningssystem för hanteringsfall där ett program behöver mer komplext beteende. Exempel som illustrerar routningsprocessen finns i Routningsexempel för Service Broker.

Beskrivning av routningsprocess

SQL Server har två olika nivåer av routningsinformation. Varje databas innehåller en lokal routningstabell, , sys.routesför konversationer som påbörjas i databasen. För konversationer som kommer från instansen av SQL Server söker SQL Server i routningstabellen i databasen som skapade konversationen. För konversationer som kommer utanför instansen söker SQL Server efter msdb.sys.routes.

Den grundläggande matchningsprocessen är identisk oavsett om konversationen kommer från instansen eller utanför instansen. Processen ignorerar vägar som har upphört att gälla. Routningsprocessen består av tre olika steg:

  1. Hitta matchande vägar: Service Broker hittar en uppsättning möjliga vägar genom att matcha tjänstnamnet och Service Broker-identifieraren.

  2. Välj en väg: Service Broker väljer en väg bland de möjliga vägarna.

  3. Leta upp måltjänsten: När den valda vägen anger 'LOCAL' som nätverksadress letar Service Broker upp tjänsten i instansen. Om tjänsten inte finns i instansen kan Service Broker återgå till steg 2 och välja en annan väg.

När ett meddelande har skickats från initieraren till målet och initieraren tar emot ett bekräftelsemeddelande från målet använder initieraren Service Broker-identifieraren i bekräftelsemeddelandena för att dirigera efterföljande meddelanden till samma mål. Service Broker hanterar bekräftelsemeddelanden; processen är transparent för ett program som använder Service Broker. Mer information om bekräftelsemeddelanden finns i Kommunikationsprotokoll för Service Broker.

Svara på meddelanden från en måltjänst

När ett meddelande som kommer utanför instansen kommer från en måltjänst kontrollerar SQL Server om den aktuella instansen innehåller Service Broker-identifieraren i meddelandet. I så fall levereras meddelandet i just detta fall som beskrivs senare i den här artikeln under Leta upp måltjänsten. Annars följer SQL Server standardmatchningsprocessen.

Hitta matchande vägar

Följande procedur beskriver hur SQL Server matchar vägar. Vid varje steg, om en eller flera vägar matchar, avslutas matchningsprocessen och Service Broker väljer en av de matchande vägarna enligt följande:

  1. Om konversationen anger en Service Broker-identifierare hittar du en väg med en exakt matchning för både tjänstnamnet och Service Broker-identifieraren.

  2. Hitta en exakt matchning för tjänstnamnet mellan vägar som inte anger en Service Broker-identifierare.

  3. Om konversationen inte anger en Service Broker-identifierare hittar du en exakt matchning för tjänstnamnet mellan vägar som anger en Service Broker-identifierare. Om routningstabellen innehåller vägar som matchar tjänstnamnet och har olika Service Broker-identifierare väljer du godtyckligt en Service Broker-identifierare. Matcha sedan bara de vägar som använder service broker-identifieraren.

  4. Om det finns en rutt till en dynamisk routingtjänst och ingen begäran om en rutt till tjänsten är under behandling, försena konversationen och begär routningsinformation från den tjänsten.

  5. Hitta en väg som varken anger tjänstnamnet eller Service Broker-identifieraren.

  6. Om konversationen anger en Service Broker-identifierare och om instansen innehåller en eller flera databaser som innehåller tjänster med namn som matchar namnet som angavs i konversationen dirigerar du konversationen som om routningstabellen innehöll en väg med tjänstnamnet och nätverksadressen 'LOCAL'.

  7. Markera att konversationen är försenad.

När en konversation har markerats som fördröjd utför Service Broker matchningsprocessen igen efter en tidsgränsperiod. Att inte hitta en matchande rutt betraktas inte som ett fel.

Välj en väg

Om matchningsprocessen hittar fler än en matchande väg väljer Service Broker en väg bland matchande vägar. För detta ändamål anses vägar som har samma Service Broker-identifierare, tjänstnamn och nätverksadress vara identiska. Service Broker använder följande procedur för att välja den exakta vägen. Vid varje steg fortsätter processen i nästa steg om det inte finns några vägar som matchar adressspecifikationen för steget.

  1. Välj en väg bland de vägar som anger en speglingsadress.

  2. Välj en väg bland de vägar som anger 'LOCAL' som nätverksadress. Om den här instansen av SQL Server inte innehåller en tjänst som matchar namnet som angavs i konversationen fortsätter du i steg 3.

  3. Välj en väg bland de vägar som anger en nätverksadress.

  4. Välj en väg bland de vägar som anger 'TRANSPORT' som nätverksadress.

Om vidarebefordran av broker inte är aktiv slänger Service Broker meddelandet om konversationen inte har sitt ursprung i den aktuella instansen och adressen för den valda vägen inte är 'LOCAL'.

Leta upp måltjänsten

Som tidigare beskrivits levererar Service Broker meddelanden till en tjänst i den nuvarande instansen när den motsvarande rutten anger 'LOCAL' som nätverksadress. För meddelanden som kommer utanför instansen måste vägen vara i msdb.sys.routes. För meddelanden som kommer från instansen måste matchande väg finnas i sys.routes tabellen för databasen som initierar konversationen.

När Service Broker fastställer att tjänsten för meddelandet finns i den aktuella instansen måste Service Broker hitta tjänsten i instansen. När en Service Broker-identifierare för konversationen finns i konversationen eller vägen, levererar Service Broker meddelanden till databasen som identifieras av Service Broker-identifieraren.

Annars letar Service Broker upp tjänsten genom att först söka efter tjänstnamnet i databasen som innehåller konversationen. Sedan söker den efter tjänstnamnet i de andra databaserna i instansen. Service Broker levererar meddelandet till den första tjänsten som finns. Den ordning i vilken Service Broker söker i de andra databaserna i en instans är dock ospecificerad och är inte garanterad att vara konsekvent från konversation till konversation. Det innebär att om det finns fler än en kopia av måltjänsten i instansen väljer Service Broker slumpmässigt tjänsten som mål.

Andra överväganden

För bättre tillförlitlighet innehåller Service Broker-routning skydd mot routningsloopar. Service Broker-routning är medveten om databasspegling och kan transparent omdirigera konversationer till den aktiva partnern för en speglad databas.

Routeloopar

Vidarebefordring av Service Broker-meddelanden spårar hur många gånger ett meddelande har vidarebefordrats för att skydda mot oändliga routningsloopar. Mer information finns i Vidarebefordran av Service Broker-meddelanden.

Om matchande väg innehåller en nätverksadress som matchar den aktuella instansen behandlar SQL Server konversationen som om konversationen har sitt ursprung utanför instansen. Service Broker dirigerar meddelanden för konversationen med hjälp av rutterna i msdb.sys.routes. Routning för dessa meddelanden är identisk med routning för meddelanden utanför instansen. I synnerhet måste vidarebefordran av meddelanden vara aktivt för att Service Broker ska kunna vidarebefordra meddelandet till en annan nätverksadress än 'LOCAL'.

Spegeladresser

Vägar med speglingsadresser har högsta prioritet när du väljer en väg bland den första uppsättningen matchande vägar. Däremot tar Service Broker inte särskild hänsyn till speglingsadresser när de fastställer matchande rutter för en konversation.

När Service Broker väljer en rutt som specificerar en speglingsadress, och Service Broker inte tidigare har levererat ett meddelande med hjälp av rutten, skickar Service Broker en begäran till båda adresserna för att avgöra vilken instans som för närvarande är huvudinstansen. När Service Broker identifierar huvudkontot skickar Service Broker alla meddelanden som använder vägen till huvudkontot utan att kontakta speglingsinstansen. Om huvudkontot inte kan nås, eller om den instansen anger att det inte längre är huvudkontot, skickar Service Broker meddelanden till den andra adressen för paret om instansen av SQL Server på den andra adressen anger att det är det nya huvudkontot.

I de fall där Service Broker inte kan nå huvudnoden, men där partnern inte påstår sig vara ny huvudnod, skickar Service Broker inte meddelanden till partnern. Service Broker försöker sedan igen huvudadressen och partneradressen tills antingen huvudkontot kan nås eller så anger partnern att det nu är huvudkontot. Med den här metoden levererar Service Broker meddelanden på ett tillförlitligt sätt när huvudenheten och partnern kan kommunicera, men den serverinstans som skickar meddelandet kan inte nå huvudenheten.