Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Groupes de conversation SQL Server Service Broker

Les groupes de conversation sont une primitive locale utilisée pour le verrouillage. Les messages au sein d'un groupe de conversation n'ont aucune garantie de commande et les groupes de conversation ne circulent pas sur le fil.

L'ordre des messages est garanti par Service Broker au sein d'une conversation. Ainsi, pour préserver l'ordre des messages corrélés lors du traitement, envoyez-les sur la même conversation.

Les groupes de conversation sont nécessaires pour regrouper un ensemble de conversations liées les unes aux autres. Les deux GET CONVERSATION GROUP et RECEIVE Les verbes garantissent qu'ils verrouillent tout un groupe de conversation, empêchant ainsi tout autre fil de traiter les messages associés. Considérons par exemple un site itinérant. Il reçoit un message avec une demande de réservation d'un forfait vacances. En conséquence, il entame une conversation avec un service de réservation d'hôtel et envoie une demande de réservation de chambre, il entame une conversation avec un service de réservation d'une compagnie aérienne et demande une réservation de voyage, il entame une conversation avec un service d'agence de location de voitures et demande un réservation de voiture. Ces trois nouvelles conversations qu'elle a créées sont toutes dans le même groupe avec la conversation initiale sur laquelle la demande a été reçue (l'application a utilisé le WITH RELATED_CONVERSATION clause de BEGIN DIALOG sur les 3). Il valide ensuite et procède au traitement des messages dans la file d'attente. Les réponses ultérieures de ces 3 requêtes corrélées commencent à arriver, à des moments assez aléatoires. Disons que la réponse de l'hôtel vient en premier. Le message est récupéré par l'application et celle-ci met à jour le statut de la demande avec la réponse de l'hôtel. En même temps, la réponse de la compagnie aérienne arrive. Si un autre fil était autorisé à le récupérer, il essaierait de mettre à jour le statut du même demande, entraînant ainsi un blocage ou même un blocage du thread qui traite la réponse de l'hôtel. Lorsque la réponse de l'hôtel est traitée, le thread s'engage et déverrouille ainsi l'ensemble du groupe de conversation, permettant à n'importe quel thread (y compris lui-même) de récupérer la réponse de la compagnie aérienne et de la traiter.