sql >> Database >  >> RDS >> Sqlserver

Sql Server Service Broker-gespreksgroepen

Gespreksgroepen zijn een lokale primitieve die wordt gebruikt voor vergrendeling. Berichten binnen een gespreksgroep hebben geen bestellingsgarantie en gespreksgroepen lopen niet over de draad.

De berichtvolgorde wordt gegarandeerd door Service Broker binnen een gesprek. Dus om de volgorde van gecorreleerde berichten in verwerking te behouden, stuur ze in hetzelfde gesprek.

Gespreksgroepen zijn nodig voor het groeperen van een reeks conversaties die aan elkaar gerelateerd zijn. Beide GET CONVERSATION GROUP en RECEIVE werkwoorden garanderen dat ze een hele conversatiegroep zullen vergrendelen, waardoor wordt voorkomen dat een andere thread gerelateerde berichten verwerkt. Denk bijvoorbeeld aan een reizende site. Hij ontvangt een bericht met het verzoek om een ​​vakantiepakket te boeken. Als gevolg hiervan start het een gesprek met een hotelboekingsservice en verzendt het een verzoek om een ​​kamer te reserveren, het start een gesprek met een reserveringsservice van een luchtvaartmaatschappij en vraagt ​​om een ​​reisreservering, het start een gesprek met een autoverhuurbedrijf en vraagt ​​om een auto reserveren. Deze drie nieuwe gesprekken die het heeft gemaakt, bevinden zich allemaal in dezelfde groep als het eerste gesprek waarop het verzoek is ontvangen (de toepassing heeft de WITH RELATED_CONVERSATION gebruikt clausule van BEGIN DIALOG op alle 3). Het begaat dan en gaat verder met het verwerken van de berichten in de wachtrij. Latere reacties van deze 3 gecorreleerde verzoeken beginnen binnen te komen, op vrijwel willekeurige tijdstippen. Stel dat de reactie van het hotel als eerste binnenkomt. Het bericht wordt opgepikt door de applicaiton en het gaat door met het bijwerken van de status van het verzoek met het antwoord van het hotel. Tegelijkertijd komt de reactie van de luchtvaartmaatschappij binnen. Als een andere thread het zou mogen oppikken, zou deze proberen de status van de dezelfde bij te werken. verzoek, wat resulteert in een blokkering of zelfs een impasse tegen de thread die de hotelreactie verwerkt. Wanneer de hotelreactie is verwerkt, verbindt de thread zich en ontgrendelt zo de hele gespreksgroep, zodat elke thread (inclusief zichzelf) de reactie van de luchtvaartmaatschappij kan oppikken en verwerken.




  1. Een database hernoemen in MySQL

  2. Primaire sleutel voor automatische verhoging invoegen in bestaande tabel

  3. SQL Server - parameter snuiven

  4. Vind Weblogic Server Versie/Patches in EBS R12.2/ Standalone Weblogic