Reenvío de mensajes de Service Broker

El reenvío de mensajes de Service Broker permite a una instancia de SQL Server aceptar mensajes procedentes de fuera de la instancia y enviarlos a una instancia distinta.

Un administrador puede utilizar el reenvío de mensajes para:

  • Proporcionar conectividad entre servidores en distintos dominios de confianza

  • Simplificar la administración mediante la creación de una instancia única centralizada que contiene la información sobre enrutamiento de un dominio

  • Distribuir trabajo entre varias instancias

Cuando el reenvío está habilitado, la tabla de enrutamiento de msdb.sys.routes determina si se reenvía un mensaje que llega desde otra instancia. Si la dirección de la ruta coincidente no es LOCAL, SQL Server reenvía el mensaje a la dirección especificada. En caso contrario, el mensaje se entrega localmente.

Cada mensaje de Service Broker contiene una duración máxima y un recuento del número de veces que el mensaje se ha reenviado. Cuando una instancia reenvía el mensaje, dicha instancia aumenta el recuento en el mensaje. Si el mensaje excede la duración máxima, la instancia de reenvío descarta el mensaje. Esta estrategia evita problemas en situaciones donde puede existir un bucle de enrutamiento.

Reenvío y entrega confiable

Una instancia que reenvía un mensaje no reconoce el mensaje al remitente. Sólo el destino final lo reconoce. Si el remitente no recibe ningún reconocimiento del destino al cabo de un período de tiempo, vuelve a enviar el mensaje.

Una instancia que realiza el reenvío de mensajes no necesita almacenar los mensajes reenviados. En su lugar, SQL Server retiene los mensajes que se van a reenviar en la memoria. La cantidad de memoria disponible para el reenvío de mensajes se especifica como parte de la configuración del extremo de Service Broker. Esta estrategia permite un reenvío de mensajes eficaz y sin estado. En el caso de que una instancia que realiza el reenvío de mensajes sufra un problema, los mensajes no se pierden. Cada mensaje se mantiene siempre en el remitente hasta que el destino final reconoce el mensaje, como se explica en Protocolos de comunicación de Service Broker.

La vista de administración sys.dm_broker_forwarded_messages contiene información sobre los mensajes que se encuentran en proceso de reenvío por parte de la instancia. Una instancia no conserva los mensajes en proceso de reenvío; estos mensajes sólo existen en la memoria. La instancia que envió el mensaje y la instancia que lo recibe conservan los mensajes. La instancia remitente no quita los mensajes hasta que la instancia de destino reconoce la recepción del mensaje.

Seguridad y reenvío

El reenvío de mensajes de Service Broker no requiere que una instancia de reenvío descifre el mensaje reenviado. Así, sólo las bases de datos que participan en la conversación deben tener configurada la seguridad de diálogo.

Sin embargo, como la seguridad de transporte se aplica a las conexiones entre las instancias de SQL Server, cada instancia de SQL Server debe tener la seguridad de transporte correctamente configurada para las instancias con las que se comunica directamente. Por ejemplo, si la instancia A y la instancia B se comunican a través de una instancia de reenvío, ambas instancias deben tener la seguridad de transporte correctamente configurada para la instancia de reenvío. Como las instancias no intercambian mensajes directamente, no deberían tener la seguridad de transporte configurada para comunicarse entre ellas.