Conversaciones de diálogo
Todos los mensajes enviados por Service Broker forman parte de una conversación. Un diálogo es una conversación entre dos servicios. Es una secuencia bidireccional, persistente y confiable de mensajes entre dos servicios.
Los diálogos proporcionan entrega de mensajes EOIO (exactamente una vez por orden). Los diálogos utilizan el identificador de conversación y los números de secuencia incluidos en cada mensaje para identificar mensajes relacionados y entregar los mensajes en el orden correcto. Un diálogo es una secuencia persistente y confiable de mensajes entre dos servicios.
La conversación de diálogo está formada por dos participantes. El iniciador inicia la conversación. El destino acepta una conversación comenzada por el iniciador. Si un participante inicia la conversación, determina los mensajes que puede enviar, como se especifica en el contrato de la conversación. El siguiente diagrama muestra el flujo de mensajes de un diálogo.
Las aplicaciones intercambian mensajes como parte del diálogo. Cuando SQL Server recibe un mensaje para un diálogo, SQL Server coloca el mensaje en la cola de dicho diálogo. La aplicación recibe el mensaje desde la cola y lo procesa según sea necesario. Como parte del proceso, es posible que la aplicación envíe mensajes al otro participante del diálogo.
Entrega confiable
Los diálogos incorporan reconocimientos automáticos de recepción de mensajes para garantizar una entrega confiable. Service Broker guarda cada mensaje saliente en la cola de transmisión hasta que el servicio remoto reconoce el mensaje. Estos reconocimientos automáticos ahorran tiempo y recursos al eliminar la necesidad de que una aplicación reconozca explícitamente cada mensaje. Siempre que es posible, los mensajes de reconocimiento se incluyen como parte de los mensajes devueltos para el diálogo.
[!NOTA] Service Broker controla internamente los mensajes de reconocimiento. Estos mensajes no aparecen en una cola y no se entregan a la aplicación.
Si Service Broker no puede obtener acceso a un servicio remoto, no lo considera un error. Cuando no se puede obtener acceso a un servicio remoto, Service Broker retiene los mensajes para dicho servicio hasta que se pueda obtener acceso a él o hasta que la duración del diálogo caduque.
Duración del diálogo
Se pueden intercambiar mensajes entre las aplicaciones mientras no caduca la duración del diálogo. La duración del diálogo se extiende desde el momento en que la instancia de SQL Server local crea el diálogo hasta que una aplicación lo finaliza explícitamente o recibe un mensaje de error asociado al diálogo. Cada participante es responsable de finalizar explícitamente la conversación cuando la aplicación recibe un mensaje que indica un error o el final de la conversación. En la mayoría de los servicios, un participante es responsable de indicar que la conversación ha finalizado y es correcta finalizando la conversación sin errores. El propósito de la conversación es el que decide si el responsable es el destino o el iniciador.
El Service Broker local de una aplicación iniciadora crea un extremo de conversación para el diálogo cuando dicha aplicación inicia el diálogo. El Service Broker local de una aplicación de destino crea un extremo de conversación para el diálogo cuando la instancia recibe el primer mensaje del diálogo.
Los diálogos también pueden garantizar que la duración de una conversación no supera un límite especificado. Opcionalmente, la aplicación iniciadora puede especificar una duración máxima del diálogo. Tanto el Service Broker local como el Service Broker remoto realizan un seguimiento de esta duración. Cuando un diálogo sigue activo al cumplirse la duración máxima, cada extremo de la conversación incluye un mensaje de error de tiempo de espera en la cola del servicio y rechaza nuevos mensajes para el diálogo. Las conversaciones nunca superan la duración máxima establecida cuando se inicia el diálogo. Tenga en cuenta que, si bien una aplicación puede seguir recibiendo mensajes para la conversación una vez que ésta finaliza, no llegarán más mensajes para la conversación, y la aplicación no podrá enviar mensajes sobre la conversación.
Las aplicaciones son responsables de indicar cuándo han terminado un diálogo finalizándolo explícitamente. Service Broker nunca finaliza un diálogo automáticamente. El diálogo permanece en la base de datos hasta que una aplicación finaliza explícitamente la conversación. Por tanto, incluso cuando el diálogo agota el tiempo de espera o el broker informa sobre un error, cada participante de la conversación debe emitir la instrucción END CONVERSATION explícitamente.
Temporizador de conversación
El temporizador de conversación permite a una aplicación recibir un mensaje a una hora específica. Cuando el temporizador de conversación caduca, SQL Server inserta un mensaje para la conversación en la cola de la conversación, en el extremo que inició el temporizador de conversación. Una aplicación puede utilizar un temporizador de conversación con cualquier fin. Un uso común del temporizador de conversación consiste en responder a los retrasos a las respuestas desde el servicio remoto. Otro uso común es crear un servicio que envíe mensajes al servicio remoto en intervalos establecidos. Por ejemplo, un servicio puede utilizar un temporizador de conversación para informar del estado actual de SQL Server cada pocos minutos. Las aplicaciones también pueden utilizar un temporizador de conversación para activar un procedimiento almacenado en un momento determinado. Esto permite que Service Broker admita actividades programadas.
Cada participante de una conversación puede establecer un temporizador de conversación por conversación. El temporizador de conversación no se comparte con el otro participante y no afecta a la duración de la conversación. En su lugar, cuando el temporizador caduca, Service Broker local agrega un mensaje de tiempo de espera a la cola del servicio local. Los mensajes de tiempo de espera tienen el tipo https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer
Vea también
Conceptos
Otros recursos
BEGIN DIALOG CONVERSATION (Transact-SQL)
BEGIN CONVERSATION TIMER (Transact-SQL)
END CONVERSATION (Transact-SQL)
SEND (Transact-SQL)
RECEIVE (Transact-SQL)
sys.transmission_queue (Transact-SQL)