Rutas

Service Broker utiliza rutas para determinar dónde se van a entregar los mensajes. Cuando un servicio envía un mensaje en una conversación, SQL Server utiliza rutas para localizar el servicio que recibirá el mensaje. Cuando ese servicio responde, SQL Server vuelve a utilizar las rutas para localizar el servicio iniciador. De forma predeterminada, cada base de datos contiene una ruta que especifica que los mensajes para cualquier servicio que no tengan ninguna ruta explícita se entreguen en la instancia de SQL Server.

Existen tres componentes básicos en una ruta:

  • Nombre del servicio
    El nombre del servicio para el que esta ruta especifica los envíos. Este nombre debe ser una coincidencia exacta de Service Name en el comando BEGIN DIALOG.

  • Identificador de instancia de broker
    Identificador único al que una base de datos específica envía los mensajes. Es la columna service_broker_guid de la fila de la tabla sys.databases de la base de datos que señala esta ruta.

  • Dirección de red
    Dirección real del equipo, una palabra clave que restringe la ruta al equipo local o una palabra clave que indica que la capa de transporte deduce la dirección a partir del nombre de servicio. Una dirección de red puede ser la dirección del broker que aloja el servicio o la dirección de un broker de reenvío.

Para determinar la ruta de una conversación, SQL Server hace coincidir el nombre de servicio y el identificador de instancia de broker especificados en la instrucción BEGIN DIALOG CONVERSATION con el nombre de servicio y el identificador de instancia de broker especificados en la ruta. Las rutas que no proporcionan un nombre de servicio coinciden con cualquier nombre de servicio. Las rutas que no proporcionan un identificador de instancia de broker coinciden con cualquier identificador de instancia de broker. Cuando más de una ruta coincide con una conversación, SQL Server selecciona una ruta, como se describe en Enrutamiento de Service Broker.

SQL Server garantiza que una vez que el destino reconoce el primer mensaje, los mensajes posteriores de esa conversación se dirigen a la misma base de datos. Sin embargo, no se garantiza que otras conversaciones del mismo grupo de conversación se dirijan a la misma base de datos. Si una aplicación requiere que los mensajes de conversaciones relacionadas se envíen a la misma base de datos, la aplicación debe proporcionar un identificador de instancia de broker cuando inicie una conversación.

De forma predeterminada, cada base de datos de usuario contiene la ruta AutoCreatedLocal. Esta ruta coincide con cualquier nombre de servicio e instancia de broker, y especifica que el mensaje debe entregarse en la instancia actual. En los casos sencillos donde tanto el iniciador como el destino de la conversación existen en la misma instancia de SQL Server, no son necesarias rutas adicionales. Sin embargo, la creación de una ruta para cada servicio ayuda a evitar la modificación o la eliminación de la ruta AutoCreatedLocal.