Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Managed Instance
In dit artikel worden de details beschreven van hoe Service Broker berichten routeert. Zie Routesvoor een overzicht.
Voor de meeste toepassingen werkt een eenvoudige benadering van Service Broker-routering goed. Geef in elke database met een service een route op voor de externe services waarmee de service communiceert. Service Broker biedt echter een geavanceerd routeringssysteem voor het verwerken van aanvragen waarbij een toepassing complexer gedrag nodig heeft. Zie Voorbeelden van Service Broker-routering voor voorbeelden die het routeringsproces illustreren.
Beschrijving van routeproces
SQL Server onderhoudt twee verschillende routeringsniveaus. Elke database bevat een lokale routeringstabel, sys.routesvoor gesprekken die in die database zijn gestart. Voor gesprekken die hun oorsprong vinden in de instantie van SQL Server, zoekt SQL Server in de routeringstabel van de database die het gesprek heeft gestart. Voor gesprekken die van buiten het exemplaar binnenkomen, doorzoekt SQL Server msdb.sys.routes.
Het basismatchingproces is identiek, ongeacht of het gesprek afkomstig is uit het systeem of van buiten het systeem. Het proces negeert routes die zijn verlopen. Het routeringsproces bestaat uit drie afzonderlijke stappen:
Overeenkomende routes zoeken: Service Broker zoekt een set mogelijke routes door de servicenaam en de Service Broker-id te vinden.
Kies een route: Service Broker kiest een route uit de set mogelijke routes.
Zoek de doelservice: Wanneer de gekozen route het netwerkadres opgeeft
'LOCAL', zoekt Service Broker de service in het exemplaar. Als de service niet bestaat in het exemplaar, kan Service Broker terugkeren naar stap 2 en een andere route kiezen.
Wanneer een bericht is verzonden van de initiator naar het doel en de initiator een bevestigingsbericht van het doel ontvangt, gebruikt de initiator de Service Broker-id in de bevestigingsberichten om volgende berichten naar hetzelfde doel te routeren. Service Broker verwerkt bevestigingsberichten; het proces is transparant voor een toepassing die gebruikmaakt van Service Broker. Zie Service Broker-communicatieprotocollen voor meer informatie over bevestigingsberichten.
Berichten van een doelservice beantwoorden
Wanneer een bericht van buiten het exemplaar afkomstig is van een doelservice, controleert SQL Server of het huidige exemplaar de Service Broker-id in het bericht bevat. Als dat het geval is, wordt het bericht bezorgd in de huidige instantie, zoals beschreven in De doelservice zoeken verderop in dit artikel. Anders volgt SQL Server het standaardkoppelingsproces.
Overeenkomende routes zoeken
In de volgende procedure wordt beschreven hoe SQL Server overeenkomt met routes. Als een of meer routes overeenkomen, eindigt het overeenkomende proces bij elke stap en kiest Service Broker een van de overeenkomende routes als volgt:
Als het gesprek een Service Broker-id opgeeft, zoekt u een route met een exacte overeenkomst voor zowel de servicenaam als de Service Broker-id.
Zoek een exacte overeenkomst voor de servicenaam tussen routes die geen Service Broker-id opgeven.
Als het gesprek geen Service Broker-id opgeeft, zoekt u een exacte overeenkomst voor de servicenaam tussen routes die een Service Broker-id opgeven. Als de routeringstabel routes bevat die overeenkomen met de servicenaam en verschillende Service Broker-id's hebben, kiest u willekeurig een Service Broker-id. Koppel vervolgens alleen de routes die gebruikmaken van die Service Broker-identificatie.
Als er een route naar een dynamische routeringsservice aanwezig is en er geen aanvraag voor een route naar de service in behandeling is, markeert u het gesprek vertraagd en vraagt u routeringsinformatie aan van die service.
Zoek een route die noch de servicenaam, noch de Service Broker-id aangeeft.
Als het gesprek een Service Broker-id opgeeft en als het exemplaar een of meer databases bevat die services bevatten met namen die overeenkomen met de naam die in het gesprek is opgegeven, routeert u het gesprek alsof de routeringstabel een route bevat met de servicenaam en het netwerkadres
'LOCAL'.Markeer het gesprek als vertraagd.
Wanneer een gesprek is gemarkeerd als vertraagd, voert Service Broker het overeenkomende proces opnieuw uit na een time-outperiode. Het niet vinden van een overeenkomende route wordt niet beschouwd als een fout.
Een route kiezen
Als in het overeenkomende proces meer dan één overeenkomende route wordt gevonden, kiest Service Broker één route tussen de overeenkomende routes. Voor dit doel worden routes met dezelfde Service Broker-id, servicenaam en netwerkadres beschouwd als identiek. Service Broker gebruikt de volgende procedure om de exacte route te kiezen. Bij elke stap wordt het proces voortgezet bij de volgende stap als er geen routes zijn die overeenkomen met de adresspecificatie voor de stap.
Kies één route tussen de routes die een spiegeladres opgeven.
Kies één route uit de routes die als het netwerkadres worden opgegeven
'LOCAL'. Als dit exemplaar van SQL Server geen service bevat die overeenkomt met de naam die in het gesprek is opgegeven, gaat u verder met stap 3.Kies één route tussen de routes die een netwerkadres opgeven.
Kies één route uit de routes die als het netwerkadres worden opgegeven
'TRANSPORT'.
Als broker forwarding niet actief is, verwijdert Service Broker het bericht als het gesprek niet afkomstig is van het huidige exemplaar en het adres van de gekozen route niet 'LOCAL' is.
De doelservice zoeken
Zoals eerder beschreven, levert Service Broker berichten aan een service in het huidige exemplaar wanneer de overeenkomende route opgeeft 'LOCAL' als het netwerkadres. Voor berichten die van buiten het exemplaar afkomstig zijn, moet de route zich in msdb.sys.routes bevinden. Voor berichten die afkomstig zijn uit de instantie, moet de overeenkomende route zich in de sys.routes tabel bevinden voor de database die het gesprek initieert.
Wanneer Service Broker bepaalt dat de service voor het bericht zich in het huidige exemplaar bevindt, moet Service Broker de service in het exemplaar vinden. Wanneer er een Service Broker-id voor het gesprek bestaat in het gesprek of de route, levert Service Broker berichten aan de database die is geïdentificeerd door de Service Broker-id.
Anders zoekt Service Broker de service door eerst te zoeken naar de servicenaam in de database die het gesprek bevat. Vervolgens wordt gezocht naar de servicenaam in de andere databases in de instantie. Service Broker levert het bericht aan de eerste gevonden service. De volgorde waarin Service Broker de andere databases in een exemplaar doorzoekt, is echter niet opgegeven en is niet gegarandeerd consistent van gesprek naar gesprek. Dit betekent dat als er meer dan één kopie van de doelservice in de omgeving bestaat, Service Broker de service willekeurig als doelwit kiest.
Andere overwegingen
Om de betrouwbaarheid te verbeteren, bevat Service Broker-routering beschermingen tegen routeringslussen. Service Broker-routering is op de hoogte van databasespiegeling en kan gesprekken transparant omleiden naar de actieve partner van een gespiegelde database.
Routelussen
Het doorsturen van berichten door de Service Broker houdt bij hoe vaak een bericht is doorgestuurd om bescherming te bieden tegen oneindige routeringslussen. Zie Het doorsturen van Berichten van Service Broker voor meer informatie.
Als de overeenkomende route een netwerkadres bevat dat resulteert in de huidige instantie, behandelt SQL Server het gesprek alsof het gesprek afkomstig is van buiten de instantie. Service Broker routeert berichten voor het gesprek met behulp van de routes in msdb.sys.routes. Routering voor deze berichten is identiek aan routering voor berichten van buiten het exemplaar. Met name het doorsturen van berichten moet actief zijn voor Service Broker om het bericht door te sturen naar een ander netwerkadres dan 'LOCAL'.
Gespiegelde adressen
Routes met gespiegelde adressen hebben de hoogste prioriteit bij het kiezen van een route uit de eerste set overeenkomende routes. Service Broker biedt echter geen speciale aandacht voor gespiegelde adressen bij het vinden van overeenkomende routes voor een gesprek.
Wanneer Service Broker een route kiest die een gespiegeld adres opgeeft en Service Broker nog geen bericht heeft bezorgd met behulp van de route, verzendt Service Broker een aanvraag naar beide adressen om te bepalen welk exemplaar momenteel de principal is. Wanneer Service Broker de principal identificeert, verzendt Service Broker alle berichten die gebruikmaken van de route naar de principal zonder contact op te nemen met het spiegelexemplaar. Als de primaire niet bereikbaar is of als dit exemplaar aangeeft dat het niet langer de primaire is, verzendt Service Broker berichten naar het andere adres van het paar, mits het exemplaar van SQL Server op dat andere adres aangeeft dat het de nieuwe primaire is.
In gevallen waarin Service Broker de principal niet kan bereiken, maar de partner geen nieuwe principal claimt, verzendt Service Broker geen berichten naar de partner. Service Broker probeert vervolgens het hoofdadres en het partneradres opnieuw totdat het hoofdadres bereikbaar is, of de partner aangeeft dat het nu het hoofdadres is. Door deze aanpak te volgen, levert Service Broker op betrouwbare wijze berichten wanneer de principal en partner kunnen communiceren, maar het exemplaar dat het bericht verzendt, kan de principal niet bereiken.