Dialogkonversationer

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

Alla meddelanden som skickas av Service Broker ingår i en konversation. En dialogruta är en konversation mellan två tjänster. En dialogruta är en tillförlitlig, beständig dubbelriktad ström av meddelanden mellan två tjänster.

Dialogrutor ger meddelandeleverans exakt en gång i ordningen (EOIO). Dialogrutor använder konversationsidentifieraren och sekvensnummer som finns i varje meddelande för att identifiera relaterade meddelanden och leverera meddelanden i rätt ordning. En dialogruta är en tillförlitlig, beständig ström av meddelanden mellan två tjänster.

En dialogkonversation har två deltagare. Initieraren startar konversationen. Målet accepterar en konversation som initieraren påbörjar. Om en deltagare startar konversationen avgör vilka meddelanden som deltagaren kan skicka, enligt vad som anges i kontraktet för konversationen. Följande diagram visar meddelandeflödet i en dialogruta:

Diagram över meddelandeflödet mellan initieraren och målet.

Program utbyter meddelanden som en del av dialogrutan. När SQL Server tar emot ett meddelande för en dialogruta placerar SQL Server meddelandet i kön för dialogrutan. Programmet tar emot meddelandet från kön och bearbetar meddelandet efter behov. Som en del av bearbetningen kan programmet skicka meddelanden till den andra deltagaren i dialogrutan.

Tillförlitlig leverans

Dialogrutor innehåller automatiska bekräftelser av meddelandekvitton för att säkerställa tillförlitlig leverans. Service Broker sparar varje utgående meddelande i överföringskö tills meddelandet bekräftas av fjärrtjänsten. Dessa automatiska bekräftelser sparar tid och resurser genom att göra det onödigt för ett program att uttryckligen bekräfta varje meddelande. När det är möjligt inkluderas bekräftelsemeddelanden som en del av returmeddelanden för dialogrutan.

Anmärkning

Service Broker hanterar bekräftelsemeddelanden internt. Dessa meddelanden visas inte i en kö och levereras inte till programmet. Service Broker anser inte att det är ett fel för en fjärrtjänst att bli oåtkomlig. När en fjärrtjänst inte kan nås innehåller Service Broker meddelanden för tjänsten tills tjänsten kan nås eller dialogrutans livslängd upphör att gälla.

Dialogrutans livslängd

Meddelanden kan utbytas mellan program under dialogrutans livslängd. Livslängden för en dialogruta varar från den tidpunkt då den lokala SQL Server-instansen skapar dialogrutan tills ett program antingen uttryckligen avslutar dialogrutan eller får ett felmeddelande som är associerat med dialogrutan. Varje deltagare ansvarar för att uttryckligen avsluta konversationen när programmet tar emot ett meddelande som indikerar ett fel eller slutet av konversationen. I de flesta tjänster ansvarar en deltagare för att indikera att konversationen är slutförd och lyckad genom att avsluta konversationen utan fel. Om detta görs av målet eller initieraren beror på konversationens syfte.

Den lokala servicekoordinatorn för ett initierande program skapar en konversationsslutpunkt för dialogrutan när programmet startar dialogrutan. Den lokala servicekoordinatorn för ett målprogram skapar en konversationsslutpunkt för dialogrutan när instansen tar emot det första meddelandet i dialogrutan.

Dialogrutor kan också garantera att livslängden för en konversation inte överskrider en angiven gräns. Det initierande programmet kan också ange en maximal livslängd för dialogrutan. Både den lokala servicekoordinatorn och den fjärranslutna Service Broker håller reda på den här livslängden. När en dialogruta förblir aktiv vid den maximala livslängden lägger varje sida av konversationen ett felmeddelande om tidsgräns i tjänstkön och nekar nya meddelanden för dialogrutan. Konversationer lever aldrig längre än den maximala livslängd som upprättas när dialogrutan startas. Även om ett program fortfarande kan ta emot meddelanden för konversationen när konversationen har avslutats, kan inga nya meddelanden tas emot för den konversationen. Programmet kan inte skicka meddelanden om konversationen.

Program ansvarar för att ange när de är klara med en dialogruta genom att uttryckligen avsluta dialogrutan. Service Broker avslutar aldrig en dialogruta automatiskt. Dialogrutan finns kvar i databasen tills ett program uttryckligen avslutar konversationen. Även om dialogrutan överskrider tidsgränsen eller om koordinatorn rapporterar ett fel måste därför varje deltagare i konversationen uttryckligen utfärda -instruktionen END CONVERSATION .

Konversationstimer

Med en konversationstimer kan ett program ta emot ett meddelande vid en viss tidpunkt. När konversationstimern upphör att gälla infogar SQL Server ett meddelande för konversationen i kön för konversationen vid slutpunkten som startade konversationstimern. Ett program kan använda en konversationstimer för valfritt ändamål. En vanlig användning för en konversationstimer är att svara på fördröjningar i svar från fjärrtjänsten. En annan vanlig användning är att skapa en tjänst som skickar meddelanden till fjärrtjänsten med angivna intervall. En tjänst kan till exempel använda en konversationstimer för att rapportera om det aktuella tillståndet för SQL Server med några minuters mellanrum. Program kan också använda en konversationstimer för att aktivera en lagrad procedur vid en viss tidpunkt. Detta gör att Service Broker kan stödja schemalagda aktiviteter.

Varje deltagare i en konversation kan ange en konversationstimer per konversation. Konversationstimern delas inte med den andra deltagaren och konversationstimern påverkar inte konversationens livslängd. När timern upphör att gälla lägger den lokala servicekoordinatorn i stället till ett timeoutmeddelande i kön för den lokala tjänsten. Ett timeout-meddelande har typnamnet https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer