Transactionele berichten

Van toepassing op:SQL ServerAzure SQL Managed Instance

De basis van het Service Broker-programmeermodel is transactionele berichten. Elke bewerking waarbij Service Broker is betrokken, maakt deel uit van de huidige transactie. Service Broker voert geen berichtenbewerking uit totdat de huidige transactie is voltooid. Als de transactie wordt teruggedraaid, garandeert de database-engine dat alle berichtenbewerkingen die deel uitmaken van de transactie, ook worden teruggedraaid. Een toepassing beheert berichtenbewerkingen als onderdeel van het beheren van SQL Server-transacties.

Wanneer een programma bijvoorbeeld een bericht binnen een transactie verzendt, verzendt Service Broker het bericht niet via het netwerk totdat het programma de transactie doorvoert. Wanneer een programma een bericht binnen een transactie ontvangt, verwijdert de database-engine het bericht pas definitief uit de wachtrij als het programma de transactie doorvoert.

Met transactionele berichten kunt u robuuste, schaalbare toepassingen schrijven door ervoor te zorgen dat de status van de database consistent blijft met de status van de wachtrijen. Wanneer een toepassing een wijziging aanbrengt in de database en een bericht verzendt of ontvangt, maakt de wijziging in de database en de berichtenbewerking deel uit van dezelfde transactie. Als de transactie wordt teruggedraaid, worden zowel de wijziging in de database als de berichtenbewerking teruggedraaid. Beide bewerkingen slagen of beide bewerkingen mislukken. In het Service Broker-model gebruikt een toepassing transactionele berichten om te garanderen dat de berichten die door de toepassing worden verzonden, de huidige status van de database weerspiegelen.

Als u optimaal gebruik wilt maken van transactionele berichten, schrijft u uw toepassingen zodat berichtenbewerkingen plaatsvinden in dezelfde transactie als de databasebewerkingen die de berichten vertegenwoordigen. Een toepassing die een order verwerkt, ontvangt bijvoorbeeld het bericht voor de order en werkt de database bij met de order in één transactie.

Als de toepassing het bericht in plaats daarvan in één transactie ontvangt en de database in een andere transactie bijwerkt, ontstaat er een situatie waarin het bericht niet meer bestaat, maar de wijziging die het bericht verzocht niet plaatsvindt. In dit geval profiteert de toepassing niet van een van de belangrijkste voordelen die Service Broker biedt. Service Broker garandeert met name dat alle berichten precies één keer worden bezorgd, in volgorde, of dat de afzender van het bericht wordt gewaarschuwd met een Service Broker-foutbericht. Een toepassing waarmee een bericht permanent uit de wachtrij wordt verwijderd, maar het bericht niet kan worden verwerkt, zoals in dit voorbeeld, wordt deze garantie verbroken. Zonder deze garantie moet de toepassing aanvullende code bevatten om mogelijke inconsistenties af te handelen of het risico op onjuiste resultaten te lopen.

Wanneer een toepassing een bericht verwerkt en geen wijzigingen aanbrengt in de database, wordt de garantie opgeslagen. Het bericht is succesvol verwerkt. Een toepassing die gebruikmaakt van Service Broker kan ervoor kiezen om een bericht te negeren, maar de toepassing mag een bericht niet per ongeluk verliezen, zelfs in gevallen waarin de toepassing de verbinding met de database verliest of onverwacht wordt afgesloten.