Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Se aplica a: SQL Server
Azure SQL Managed Instance
Todos los mensajes enviados por Service Broker forman parte de una conversación. Un diálogo es una conversación entre dos servicios. Un diálogo es un flujo 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 un flujo persistente y confiable de mensajes entre dos servicios.
La conversación de diálogo está formada por dos participantes. El iniciador comienza 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 del diálogo. La aplicación recibe el mensaje desde la cola y lo procesa según sea necesario. Como parte del proceso, la aplicación puede enviar mensajes al otro participante del diálogo.
Los cuadros de diálogo incorporan confirmaciones automáticas de recepción de mensajes para garantizar una entrega confiable. Service Broker guarda cada mensaje saliente en la cola de transmisión hasta que sea reconocido por el servicio remoto. Estas confirmaciones automáticas 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 confirmación se incluyen como parte de los mensajes devueltos para el diálogo.
Nota
Service Broker controla internamente los mensajes de confirmación. Estos mensajes no aparecen en una cola y no se entregan a la aplicación. Service Broker no considera un error que un servicio remoto sea inaccesible. Cuando no se puede obtener acceso a un servicio remoto, Service Broker retiene los mensajes para ese servicio hasta que se pueda obtener acceso a él o hasta que el período de vigencia del diálogo expire.
Se pueden intercambiar mensajes entre las aplicaciones mientras no expira el período de vigencia del diálogo. El período de vigencia 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 relacionado con el 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.
La instancia de Service Broker local de una aplicación iniciadora crea un extremo de conversación del diálogo cuando la aplicación lo inicia. La instancia de Service Broker local de una aplicación de destino crea un extremo de conversación del diálogo cuando la instancia recibe el primer mensaje del diálogo.
Los diálogos también pueden garantizar que el período de vigencia de una conversación no supera un límite especificado. Opcionalmente, la aplicación iniciadora puede especificar un período de vigencia máximo para el diálogo. Tanto la instancia de Service Broker local como la remota hacen un seguimiento de esta vigencia. Cuando un diálogo sigue activo durante el período de vigencia máximo, ambos extremos de la conversación sitúan un mensaje de error de tiempo de espera agotado en la cola del servicio y rechazan los nuevos mensajes para el diálogo. Las conversaciones nunca superan el período de vigencia máximo establecido 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 esta finaliza, no pueden llegar mensajes nuevos para esa conversación. La aplicación no puede enviar mensajes sobre la conversación.
Las aplicaciones son responsables de indicar cuándo terminan con un diálogo finalizando explícitamente el mismo. Service Broker nunca finaliza automáticamente un cuadro de diálogo. 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.
El temporizador de conversación permite a una aplicación recibir un mensaje a una hora específica. Cuando expira el temporizador de conversación, SQL Server inserta un mensaje para la conversación en la cola de la misma, en el punto de conexión 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 al período de vigencia de la conversación. En su lugar, cuando el temporizador expira, Service Broker local agrega un mensaje de tiempo de espera agotado a la cola del servicio local. Un mensaje de tiempo de espera tiene el nombre de tipo https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer
Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyCursos
Módulo
Introducción a los servicios de mensajería de Azure - Training
Obtenga información sobre cómo se puede mejorar la comunicación entre los dispositivos mediante las colas de almacenamiento de Azure, Event Hubs, Event Grid y Service Bus.
Documentación
END CONVERSATION (Transact-SQL) - SQL Server
END CONVERSATION (Transact-SQL)
SEND (Transact-SQL) - SQL Server
SEND (Transact-SQL)
sys.conversation_endpoints (Transact-SQL) - SQL Server
sys.conversation_endpoints (Transact-SQL)