Compartir a través de


mensajes del sistema de Broker

Se aplica a: SQL Server Azure SQL Managed Instance

Service Broker usa tres tipos de mensajes del sistema para comunicar información de estado y error de Service Broker.

Controlar mensajes del sistema

La mayoría de los mensajes de una conversación de Service Broker son los mensajes definidos por la aplicación para comunicarse entre servicios. Cada mensaje debe seguir un formato de tipo de mensaje definido por una instrucción CREATE MESSAGE TYPE. El contrato especificado en la instrucción BEGIN DIALOG CONVERSATION define el conjunto de tipos de mensaje permitidos para una conversación.

Además de los tipos de mensaje definidos por la aplicación que se especifican en el contrato, cualquier conversación puede recibir también mensajes que usan uno de los tres tipos de mensaje definidos por el sistema. Service Broker usa estos tipos de mensaje para notificar errores y el estado de los diálogos. Cada aplicación debe contener lógica para controlar mensajes de error y de fin de diálogo. Si la aplicación establece un temporizador de conversación en una conversación de diálogo, la aplicación debe contener la lógica para controlar los mensajes del temporizador de diálogos. Service Broker proporciona estos tipos de mensajes a todos los servicios, tanto si aparecen en el contrato para el servicio como si no. Para obtener más información, consulte Administrar mensajes de error de Service Broker.

mensajes de error

Cuando un servicio remoto finaliza un diálogo con un error o el agente local detecta un error imposible de recuperar en un diálogo, el agente local crea un mensaje de error. Los mensajes de error son del tipo de mensaje https://schemas.microsoft.com/SQL/ServiceBroker/Error. Los mensajes de error se validan como XML correcto.

El documento XML incluido en un mensaje de error usa el espacio de nombres https://schemas.microsoft.com/SQL/ServiceBroker. El elemento raíz del documento tiene el nombre local Error y contiene un elemento denominado Code y un elemento denominado Message. El elemento Code contiene un valor entero. El elemento Message contiene el texto legible del mensaje.

Por ejemplo, un mensaje de error generado por un servicio que procesa informes de gastos puede contener el siguiente XML (con formato modificado para facilitar la lectura):

<?xml version="1.0"?>
<Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker">
  <Code>12</Code>
  <Description>
    Unknown cost center "127-1000". Please check the cost center list
    and resubmit the report.
  </Description>
</Error>

Una operación de recepción recibe un mensaje de error antes que cualquier mensaje para dicho diálogo distinto de un mensaje de temporizador de diálogos. Esto se produce sin tener en cuenta el orden en el que el mensaje de error llegó a la cola. Cuando una cola incluye un mensaje de temporizador de diálogo y un mensaje de error, una operación de recepción recibe el mensaje de temporizador de diálogo antes que el mensaje de error.

Cuando un mensaje de error llega a un diálogo, el agente genera un error si una aplicación intenta enviar un mensaje en ese diálogo. Sin embargo, una aplicación puede recibir cualquier mensaje restante para el diálogo, incluso después de haber recibido un mensaje de error.

Mensajes de fin de diálogo

Cuando una aplicación finaliza un diálogo sin especificar un error, el agente local envía un mensaje de fin de diálogo al agente remoto. Los mensajes de fin de diálogo son del tipo de mensaje https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.

Los mensajes de fin de diálogo son mensajes vacíos. Una operación de recepción recibe un mensaje de fin de diálogo en el orden en que el mensaje ha llegado a la cola.

Mensajes de temporizador de diálogo

Los mensajes de temporizador de diálogo indican que el temporizador de conversación de un diálogo ha expirado. Estos mensajes son del tipo de mensaje https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer. Los temporizadores de conversación son específicos de un extremo de la conversación; Service Broker nunca envía un mensaje de temporizador de diálogo al otro extremo de la conversación.

Los mensajes de temporizador de diálogo son mensajes vacíos. Una operación de recepción recibe el mensaje de temporizador de diálogo antes que cualquier otro mensaje para ese diálogo, independientemente del orden en que el mensaje de tiempo de espera ha llegado a la cola.

Vea también