Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Grupos de conversação do Sql Server Service Broker


Grupos de conversação são uma primitiva local usada para travamento. As mensagens dentro de um grupo de conversação não têm garantias de ordem e os grupos de conversação não fluem pela rede.

A ordem das mensagens é garantida pelo Service Broker dentro de uma conversa. Portanto, para preservar a ordem das mensagens correlacionadas no processamento, envie-as na mesma conversa.

Os grupos de conversação são necessários para agrupar um conjunto de conversas relacionadas entre si. Ambos GET CONVERSATION GROUP e RECEIVE os verbos garantem que bloquearão um grupo de conversação inteiro, evitando assim que qualquer outra thread processe mensagens relacionadas. Por exemplo, considere um site de viagem. Recebe uma mensagem com um pedido para reservar um pacote de férias. Como resultado, inicia uma conversa com um serviço de reservas de hotel e envia um pedido de reserva de quarto, inicia uma conversa com um serviço de reservas de companhias aéreas e solicita uma reserva de viagem, inicia uma conversa com um serviço de agência de aluguer de automóveis e solicita um reserva de carro. Essas três novas conversas que ele criou estão todas no mesmo grupo com a conversa inicial em que a solicitação foi recebida (o aplicativo usou o WITH RELATED_CONVERSATION cláusula de BEGIN DIALOG em todos os 3). Em seguida, ele confirma e continua a processar as mensagens na fila. As respostas posteriores dessas 3 solicitações correlacionadas começam a chegar, em momentos praticamente aleatórios. Digamos que a resposta do hotel venha primeiro. A mensagem é captada pelo aplicativo e segue em frente para atualizar o status da solicitação com a resposta do hotel. Ao mesmo tempo, a resposta da companhia aérea é recebida. Se outro tópico puder pegá-lo, ele tentará atualizar o status do mesmo request, resultando em bloqueio ou mesmo deadlock na thread que está processando a resposta do hotel. Quando a resposta do hotel é processada, o encadeamento é confirmado e, assim, desbloqueia todo o grupo de conversa, permitindo que qualquer encadeamento (incluindo ele mesmo) pegue a resposta da companhia aérea e a processe.