Konversationsgrupper är en lokal primitv som används för låsning. Meddelanden inom en konversationsgrupp har inga ordningsgarantier och konversationsgrupper flyter inte över tråden.
Meddelandeordern garanteras av Service Broker inom en konversation. Så för att bevara ordningen på korrelerade meddelanden under behandling, skicka dem i samma konversation.
Konversationsgrupper behövs för att gruppera en uppsättning konversationer som är relaterade till varandra. Båda GET CONVERSATION GROUP
och RECEIVE
verb garanterar att de kommer att låsa en hel konversationsgrupp, vilket förhindrar någon annan tråd från att behandla relaterade meddelanden. Tänk till exempel på en resewebbplats. Den får ett meddelande med en begäran om att boka ett semesterpaket. Som ett resultat initierar den en konversation med en hotellbokningstjänst och skickar en förfrågan om att boka ett rum, den inleder en konversation med en flygbolagsreservationstjänst och ber om resebokning, den initierar en konversation med en biluthyrningsbyrå och ber om en bilreservation. Dessa tre nya konversationer som skapades är alla i samma grupp med den första konversationen som begäran togs emot på (applikationen har använt WITH RELATED_CONVERSATION
klausulen i BEGIN DIALOG på alla 3 av dem). Den begår sedan och fortsätter att bearbeta meddelandena i kön. Senare svar från dessa tre korrelerade förfrågningar börjar komma in, vid ganska slumpmässiga tidpunkter. Säg att hotellresponden kommer först. Meddelandet hämtas av applikationen och det fortsätter för att uppdatera statusen för begäran med svaret från hotellet. Samtidigt kommer flygbolagets svar in. Om en annan tråd skulle få ta upp det, skulle den försöka uppdatera statusen för samma begäran, vilket resulterar i blockering eller till och med dödläge mot tråden som behandlar hotellsvaret. När hotellsvaret bearbetas binds tråden och låser därmed upp hela konversationsgruppen, vilket gör det möjligt för vilken tråd som helst (inklusive sig själv) att plocka upp flygbolagets svar och bearbeta det.