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
Een gespreksgroep identificeert een groep gerelateerde gesprekken. Met een gespreksgroep kan een toepassing eenvoudig gesprekken coördineren die betrokken zijn bij een specifieke zakelijke taak.
Elk gesprek behoort tot één gespreksgroep. Elke gespreksgroep is gekoppeld aan een specifieke service en alle gesprekken in de groep zijn gesprekken van of naar die service. Een gespreksgroep kan een willekeurig aantal gesprekken bevatten.
SQL Server maakt gebruik van gespreksgroepen om EOIO-toegang (Exactly Once-In-Order) te bieden tot berichten die zijn gerelateerd aan een specifieke zakelijke taak. Wanneer een toepassing een bericht verzendt of ontvangt, vergrendelt SQL Server de gespreksgroep waartoe het bericht behoort. Er kan dus slechts één sessie tegelijk berichten ontvangen voor de gespreksgroep. De vergrendeling van de gespreksgroep garandeert dat een toepassing berichten op elk gesprek precies eenmaal in volgorde (EOIO) kan verwerken. Omdat een gespreksgroep meer dan één gesprek kan bevatten, kan een toepassing gespreksgroepen gebruiken om berichten met betrekking tot dezelfde zakelijke taak te identificeren en deze berichten samen te verwerken.
Een gespreksgroep wordt niet gedeeld tussen deelnemers in een gesprek. Daarom is elke deelnemer in een gesprek vrij om dat gesprek zo nodig te groeperen. Een toepassing kan complexe interacties tussen services beheren zonder speciale ondersteuning van de services.
Voorbeelden van gespreksgroepen
Een human resources-toepassing kan een GetEmployeeInformation service hebben die informatie uit een salarisservice en informatie uit een voordelenservice combineert. De GetEmployeeInformation service begint een gesprek met elke service en heeft een gesprek met de andere in dezelfde gespreksgroep. Service Broker voegt de gespreksgroep-id toe aan elk binnenkomend bericht in deze twee gesprekken, ongeacht of het bericht afkomstig is van de salarisadministratie of de voordelenservice. Omdat de gesprekken zich in dezelfde gespreksgroep bevinden, biedt Service Broker alle informatie die nodig is om de GetEmployeeInformation service te laten overeenkomen met de voordelengegevens van de salarisadministratie, ongeacht het aantal aanvragen dat wordt uitgevoerd in de GetEmployeeInformation service.
De berichten aan de salarisadministratie en de berichten naar de voordelenservice bevatten geen informatie over de gespreksgroep die door GetEmployeeInformationde gespreksgroep is gemaakt. Elke service werkt onafhankelijk en alleen de GetEmployeeInformation service onderhoudt informatie over de hele zakelijke taak. Door services onafhankelijk van elkaar te houden, kan elke service eenvoudig te codeeren en gemakkelijk te onderhouden zijn. Een ander voordeel van het handhaven van deze onafhankelijkheid is dat als de ene service niet beschikbaar is, de andere service kan blijven werken.
Toepassingsstatus organiseren
Een voordeel van de gespreksgroep is dat de gespreksgroep-id een handige sleutel is om de toepassingsstatus te identificeren en op te halen. De id van de gespreksgroep maakt het eenvoudig om de toepassingsstatus in de database te behouden. Als het uitvoeren van een taak betrekking heeft op het uitwisselen van veel berichten in de loop van de tijd, is het inefficiënt om een exemplaar van de toepassing actief te houden om de toepassingsstatus te behouden. Een toepassing wordt beter geschaald als, tussen berichten, alle gegevens die aan de taak zijn gekoppeld, worden opgeslagen in de database en vervolgens worden opgehaald wanneer het volgende bericht dat aan die taak is gekoppeld, wordt ontvangen. De id van de gespreksgroep kan worden gebruikt als de primaire sleutel in een statustabel van een toepassingsontwikkelaar om snel de status op te halen die aan een bepaalde taak is gekoppeld. Zie Statusbeheer voor meer informatie over het gebruik van de gespreksgroep-id om de status te behouden.
Omdat SQL Server de gespreksgroep vergrendelt telkens wanneer een toepassing een bericht verzendt of ontvangt, hoeft een toepassing niet expliciet te voorkomen dat een ander programma dezelfde statusgegevens tegelijkertijd bijwerkt. De toepassing vergrendelt gewoon de gespreksgroep, herstelt de status, verwerkt berichten, status van updates en voert vervolgens de transactie door.
Voor het gemak kan een toepassing de volgende beschikbare gespreksgroep vergrendelen zonder een bericht te ontvangen. Met behulp van de GET CONVERSATION GROUP instructie kan een toepassing een gespreksgroep vergrendelen en de status herstellen voordat berichten worden verwerkt. Zie de instructie GET CONVERSATION GROUP voor meer informatie.
Levensduur van gespreksgroep
Service Broker beheert de levensduur van de gespreksgroep. U hoeft geen gespreksgroep expliciet te maken of te vernietigen. Service Broker maakt onder de volgende omstandigheden een nieuwe gespreksgroep:
Een toepassing begint een nieuw gesprek dat niet is gerelateerd aan een bestaande gespreksgroep. Service Broker maakt een nieuwe gespreksgroep en wijst een nieuwe id toe aan de gespreksgroep.
Een toepassing begint een gesprek met betrekking tot een gespreksgroep-id die momenteel niet bestaat. In dit geval maakt Service Broker een nieuwe gespreksgroep met de opgegeven id. Dit betekent dat u uw eigen waarde kunt toewijzen aan een gespreksgroep-id.
Service Broker ontvangt het eerste bericht over een nieuw gesprek dat is gestart door een andere service. In dit geval gebruikt Service Broker de naam van de service en de instantie-id van de broker (indien aanwezig) om het volgende te doen:
- Zoek de juiste wachtrij.
- Maak een nieuwe gespreksgroep en koppel de gespreksgroep aan de wachtrij.
- Maak een nieuwe gespreksgreep en voeg de gespreksgreep toe aan de nieuwe gespreksgroep.
- Plaats het binnenkomende bericht in de wachtrij.
Service Broker voegt de gespreksgroep-id toe aan de metagegevens voor het gesprek dat de gespreksgroep heeft gemaakt. Wanneer Service Broker een bericht ontvangt voor een gesprek dat is gekoppeld aan de gespreksgroep, voegt Service Broker de gespreksgroep-id toe aan dat bericht voordat u het bericht in de wachtrij invoert.
Een gespreksgroep-id is geldig vanaf het moment dat Service Broker deze maakt totdat alle gesprekken die aan het id-einde zijn gekoppeld; Dat wil gezegd, de gespreksgroep-id is gegarandeerd geldig terwijl een gesprek in de groep actief is.
Een toepassing die gebruikmaakt van de gespreksgroep-id om de toepassingsstatus te beheren, maakt gebruik van een statustabel die door de ontwikkelaar wordt geleverd. De toepassing moet die status uit de statustabel verwijderen wanneer de toepassing bepaalt dat de status niet meer nodig is. In veel gevallen wordt de status van de toepassing verwijderd nadat de taak is voltooid of nadat fouten hebben aangegeven dat de taak niet kan worden voltooid. In deze gevallen bevat de toepassing doorgaans de opdracht om de status te verwijderen binnen de transactie waarmee het uiteindelijke antwoordbericht wordt verzonden en het gesprek wordt beëindigd. Deze strategie zorgt ervoor dat de toepassingsstatus en de gespreksgroep-id dezelfde levensduur hebben. Als de verzendbewerking mislukt, wordt de verwijderbewerking teruggedraaid. Als de verwijderbewerking mislukt, wordt de verzendbewerking teruggedraaid en wordt het bericht niet door SQL Server verzonden. In beide gevallen blijven de toepassingsstatus en de gespreksgroep-id geldig. Als beide bewerkingen slagen, eindigt de levensduur van de gespreksgroep-id op hetzelfde moment dat het programma de bijbehorende toepassingsstatus verwijdert.