Grupy wątków to lokalny element podstawowy używany do blokowania. Wiadomości w ramach grupy konwersacyjnej nie mają gwarancji kolejności, a grupy konwersacyjne nie przepływają przez przewód.
Kolejność wiadomości gwarantuje Service Broker w ramach konwersacji. Aby więc zachować kolejność powiązanych wiadomości podczas przetwarzania, wyślij je w tej samej rozmowie.
Grupy wątków są potrzebne do grupowania zestawu wątków, które są ze sobą powiązane. Oba GET CONVERSATION GROUP
i RECEIVE
czasowniki gwarantują, że zablokują całą grupę konwersacyjną, zapobiegając w ten sposób przetwarzaniu powiązanych komunikatów przez inny wątek. Weźmy na przykład witrynę podróżniczą. Otrzymuje wiadomość z prośbą o rezerwację pakietu wakacyjnego. W efekcie inicjuje rozmowę z serwisem rezerwacji hoteli i wysyła prośbę o rezerwację pokoju, inicjuje rozmowę z serwisem rezerwacji linii lotniczych i prosi o rezerwację podróży, inicjuje rozmowę z serwisem wypożyczalni samochodów i prosi o rezerwacja samochodu. Te trzy nowe konwersacje, które utworzył, znajdują się w tej samej grupie, co początkowa konwersacja, w której odebrano żądanie (aplikacja użyła WITH RELATED_CONVERSATION
klauzula BEGIN DIALOG na wszystkich 3 z nich). Następnie zatwierdza i przystępuje do przetwarzania wiadomości w kolejce. Późniejsze odpowiedzi z tych 3 skorelowanych żądań zaczynają napływać w dość losowych momentach. Załóżmy, że odpowiedź hotelu pojawia się jako pierwsza. Wiadomość jest odbierana przez aplikację i kontynuuje aktualizację statusu żądania wraz z odpowiedzią hotelu. W tym samym czasie nadchodzi odpowiedź linii lotniczej. Gdyby inny wątek mógł ją odebrać, próbowałby zaktualizować stan tego samego żądanie, co skutkuje zablokowaniem lub nawet zakleszczeniem wątku, który przetwarza odpowiedź hotelu. Gdy odpowiedź hotelu jest przetwarzana, wątek zatwierdza, a tym samym odblokowuje całą grupę konwersacyjną, umożliwiając dowolnemu wątkowi (w tym sobie) odebranie odpowiedzi linii lotniczej i przetworzenie jej.