Transaktionsmeddelanden

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

Grunden för service broker-programmeringsmodellen är transaktionsmeddelanden. Alla åtgärder som involverar Service Broker är en del av den aktuella transaktionen. Service Broker bekräftar inte en meddelandeoperation förrän den aktuella transaktionen slutförs. Om transaktionen återställs garanterar databasmotorn att alla meddelandeåtgärder som ingår i transaktionen också återställs. Ett program hanterar meddelandeåtgärder som en del av hanteringen av SQL Server-transaktioner.

När ett program till exempel skickar ett meddelande inom en transaktion skickar Service Broker inte meddelandet via nätverket förrän programmet checkar in transaktionen. När ett program tar emot ett meddelande i en transaktion tar databasmotorn inte bort meddelandet permanent från kön förrän programmet checkar in transaktionen.

Transaktionsmeddelanden hjälper dig att skriva robusta, skalbara program genom att säkerställa att databasens tillstånd förblir konsekvent med köernas tillstånd. När ett program gör en ändring i databasen och skickar eller tar emot ett meddelande ingår ändringen i databasen och meddelandeåtgärden i samma transaktion. Om transaktionen rullar tillbaka, rullas både ändringen till databasen och meddelandeåtgärden tillbaka. Båda åtgärderna lyckas eller så misslyckas båda åtgärderna. I Service Broker-modellen använder ett program transaktionsmeddelanden för att garantera att de meddelanden som skickas av programmet återspeglar databasens aktuella tillstånd.

Om du vill dra full nytta av transaktionsmeddelanden skriver du dina program så att meddelandeåtgärder utförs i samma transaktion som databasåtgärderna som meddelandena representerar. Ett program som bearbetar en order tar till exempel emot meddelandet för ordern och uppdaterar databasen med ordningen i en enda transaktion.

Om programmet i stället tar emot meddelandet i en transaktion och uppdaterar databasen i en annan transaktion, skapar ett misslyckande med att uppdatera databasen en situation där meddelandet inte längre finns, men ändringen som det begärda meddelandet inte har skett. I det här fallet drar programmet inte nytta av någon av de viktigaste fördelarna som Service Broker ger. I synnerhet garanterar Service Broker att alla meddelanden levereras exakt en gång, i ordning eller att meddelandesändaren meddelas med ett Service Broker-felmeddelande. Ett program som tar bort ett meddelande från kön permanent, men inte bearbetar meddelandet som i det här exemplet, bryter den här garantin. Utan den här garantin måste programmet innehålla ytterligare kod för att hantera eventuella inkonsekvenser eller riskera felaktiga resultat.

När ett program bearbetar ett meddelande och inte gör några ändringar i databasen gäller garantin. Meddelandet har bearbetats framgångsrikt. Ett program som använder Service Broker kan välja att ignorera ett meddelande, men programmet får inte oavsiktligt förlora ett meddelande, även om programmet förlorar anslutningen till databasen eller avslutas oväntat.