sql >> Base de Datos >  >> RDS >> Sqlserver

Grupos de conversación de Sql Server Service Broker

Los grupos de conversación son una primitiva local utilizada para el bloqueo. Los mensajes dentro de un grupo de conversación no tienen garantías de orden y los grupos de conversación no fluyen a través del cable.

Service Broker garantiza el orden de los mensajes dentro de una conversación. Entonces, para preservar el orden de los mensajes correlacionados en el procesamiento, envíelos en la misma conversación.

Los grupos de conversación son necesarios para agrupar un conjunto de conversaciones que están relacionadas entre sí. Ambos GET CONVERSATION GROUP y RECEIVE los verbos garantizan que bloquearán un grupo de conversación completo, evitando así que cualquier otro hilo procese mensajes relacionados. Por ejemplo, considere un sitio de viaje. Recibe un mensaje con una solicitud para reservar un paquete de vacaciones. Como resultado, inicia una conversación con un servicio de reserva de hotel y envía una solicitud para reservar una habitación, inicia una conversación con un servicio de reserva de una aerolínea y solicita una reserva de viaje, inicia una conversación con un servicio de agencia de alquiler de automóviles y solicita un reserva de coche. Estas tres nuevas conversaciones que creó están todas en el mismo grupo con la conversación inicial en la que se recibió la solicitud (la aplicación ha usado WITH RELATED_CONVERSATION cláusula de BEGIN DIALOG en los 3). Luego se compromete y procede a procesar los mensajes en la cola. Las respuestas posteriores de estas 3 solicitudes correlacionadas comienzan a llegar, en momentos prácticamente aleatorios. Digamos que la respuesta del hotel es lo primero. La aplicación recoge el mensaje y continúa actualizando el estado de la solicitud con la respuesta del hotel. Al mismo tiempo, llega la respuesta de la aerolínea. Si se permitiera que otro subproceso lo recogiera, intentaría actualizar el estado del mismo. solicitud, lo que resulta en un bloqueo o incluso un punto muerto en el subproceso que está procesando la respuesta del hotel. Cuando se procesa la respuesta del hotel, el subproceso se compromete y, por lo tanto, desbloquea todo el grupo de conversación, lo que permite que cualquier subproceso (incluido él mismo) recoja la respuesta de la aerolínea y la procese.