Ejemplos de enrutamiento de Service Broker

Se aplica a:SQL ServerAzure SQL Managed Instance

Esta sección presenta ejemplos del proceso de enrutamiento de Service Broker. Cada ejemplo contiene tablas de enrutamiento de ejemplo para AdventureWorks2008R2 y msdby describe cómo Service Broker usa esas tablas de enrutamiento para elegir una ruta para el mensaje.

Nota:

Los ejemplos de código de este artículo se probaron mediante la base de datos de ejemplo AdventureWorks2025, que puede descargar de la página principal de ejemplos y proyectos de comunidad de Microsoft SQL Server .

Las tablas de enrutamiento presentadas en este tema son versiones simplificadas de la sys.routes vista de catálogo. El ID de ruta y el propietario no son importantes para el proceso de enrutamiento, y todas las rutas se consideran que tienen una duración indefinida.

Un valor de NULL en la remote_service_name columna coincide con cualquier nombre de servicio. Un valor de NULL en la broker_instance columna coincide con cualquier identificador de Service Broker.

Los ejemplos de mensajes salientes no usan la tabla de enrutamiento en msdby los ejemplos para los mensajes entrantes y el reenvío de mensajes no usan la tabla de enrutamiento para AdventureWorks2008R2.

Ejemplo 1: Configuración predeterminada

En este ejemplo se describe la configuración predeterminada para el enrutamiento de Service Broker. De forma predeterminada, todas las bases de datos excepto master contienen la AutoCreatedLocal ruta. Por lo tanto, las tablas de enrutamiento para AdventureWorks2008R2 y msdb contienen la siguiente información.

Columna AdventureWorks2008R2 msdb
name AutoCreatedLocal AutoCreatedLocal
remote_service_name NULL NULL
broker_instance NULL NULL
address LOCAL LOCAL
mirror_address NULL NULL

En este caso, todos los diálogos creados en la AdventureWorks2008R2 base de datos se entregan a un servicio de la instancia actual. Además, todos los diálogos que llegan desde fuera de la instancia se entregan a un servicio de la instancia actual.

En el caso de las conversaciones creadas en AdventureWorks2008R2, AutoCreatedLocal es la única ruta de AdventureWorks2008R2.sys.routes. Esta ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio del mensaje no existe en la instancia local, se quita el mensaje.

El proceso es el mismo para las conversaciones que llegan desde fuera de la instancia. Para las conversaciones que llegan desde fuera de la instancia, AutoCreatedLocal es la única ruta en msdb.sys.routes. Esta ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio del mensaje no existe en la instancia local, se quita el mensaje.

Ejemplo 2: Ruta de red a un servicio específico

En este ejemplo se describe la configuración de enrutamiento estándar para los servicios situados fuera de la instancia actual. Para configurar una ruta a un servicio externo, cree la ruta en la base de datos que inicia la conversación. En este ejemplo, AdventureWorks2008R2 contiene una ruta para el servicio OrderParts. La ruta contiene una dirección de red para el OrderParts servicio.

Columna AdventureWorks2008R2 AdventureWorks2008R2 msdb
name AutoCreatedLocal OrderPartsRoute AutoCreatedLocal
remote_service_name NULL OrderParts NULL
broker_instance NULL NULL NULL
address LOCAL TCP://host2.Adventure-Works.com:4022/ LOCAL
mirror_address NULL NULL NULL

En este caso, todos los cuadros de diálogo creados en la AdventureWorks2008R2 base de datos para el servicio OrderParts coinciden con la ruta OrderPartsRoute. Service Broker envía estos mensajes a la dirección TCP://host2.Adventure-Works.com:4022/de red . El resto de conversaciones se entregan a servicios de la misma instancia.

Para las conversaciones creadas en AdventureWorks2008R2 con un servicio de destino de OrderParts, el conjunto de rutas coincidentes contiene OrderPartsRoute, porque esta ruta coincide exactamente con el nombre del servicio. OrderPartsRoute es la única ruta del conjunto de rutas coincidentes, por lo que Service Broker elige esa ruta.

Para las conversaciones creadas en AdventureWorks2008R2 en un servicio de destino diferente, el conjunto de rutas coincidentes contiene AutoCreatedLocal. Dado que esta es la única ruta del conjunto de rutas coincidentes, Service Broker elige esa ruta. Si el servicio del mensaje no existe en la instancia local, Service Broker marca la conversación DELAYED.

Para las conversaciones que llegan desde fuera de la instancia, AutoCreatedLocal es la única ruta en msdb.sys.routes. Esta ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio del mensaje no existe en la instancia local, se quita el mensaje.

Ejemplo 3: Ruta de red a una base de datos reflejada

En este ejemplo se describe la configuración de enrutamiento estándar para un servicio hospedado en una base de datos reflejada situada fuera de la instancia actual. Para configurar una ruta a un servicio externo, cree la ruta en la base de datos que inicia la conversación. En este ejemplo, AdventureWorks2008R2 contiene una ruta para el servicio OrderParts. La ruta contiene una dirección de red y una dirección reflejada para el OrderParts servicio.

Columna AdventureWorks2008R2 AdventureWorks2008R2 msdb
name AutoCreatedLocal OrderPartsRoute AutoCreatedLocal
remote_service_name NULL OrderParts NULL
broker_instance NULL NULL NULL
address LOCAL TCP://partner1.Adventure-Works.com:4022/ LOCAL
mirror_address NULL TCP://partner2.Adventure-Works.com:4022/ NULL

Para las conversaciones creadas en AdventureWorks2008R2 con un servicio de destino de OrderParts, el conjunto de rutas coincidentes contiene OrderPartsRoute, porque esta ruta coincide exactamente con el nombre del servicio. OrderPartsRoute es la única ruta del conjunto de rutas coincidentes, por lo que Service Broker elige esa ruta. Service Broker comprueba tanto la dirección como la dirección espejo para determinar qué asociado es el principal, y luego envía el mensaje al principal.

Para las conversaciones creadas en AdventureWorks2008R2 en un servicio de destino diferente, el conjunto de rutas coincidentes contiene AutoCreatedLocal. Dado que esta es la única ruta del conjunto de rutas coincidentes, Service Broker elige esa ruta. Si el servicio del mensaje no existe en la instancia local, Service Broker marca la conversación DELAYED.

Para las conversaciones que llegan desde fuera de la instancia, AutoCreatedLocal es la única ruta en msdb.sys.routes. Esta ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio del mensaje no existe en la instancia local, se quita el mensaje.

Ejemplo 4: Ruta de red a todos los servicios externos

En este ejemplo se envían mensajes de servicios de AdventureWorks2008R2 a otra instancia, a menos que el servicio exista en la instancia local. Los mensajes de los servicios que no están en la instancia local van a la misma dirección de red. Esta configuración puede ser útil si la instancia de SQL Server en esa dirección de red realiza el reenvío de mensajes.

En este ejemplo, la AdventureWorks2008R2 base de datos contiene la AutoCreatedLocal ruta, así como una ruta a la dirección TCP://forwarding.Adventure-Works.com:4022/.

Columna AdventureWorks2008R2 AdventureWorks2008R2 msdb
name AutoCreatedLocal ExternalRoute AutoCreatedLocal
remote_service_name NULL NULL NULL
broker_instance NULL NULL NULL
address LOCAL TCP://forwarding.Adventure-Works.com:4022/ LOCAL
mirror_address NULL NULL NULL

En el caso de las conversaciones creadas en AdventureWorks2008R2, el conjunto de rutas coincidentes contiene tanto AutoCreatedLocal como ExternalRoute, porque el nombre del servicio remoto y la instancia del agente son los mismos para ambas rutas. Service Broker debe elegir entre estas dos rutas. Service Broker elige rutas con la dirección 'LOCAL' antes de las rutas que especifican una dirección de red, por lo que Service Broker elige AutoCreatedLocalprimero . Si el servicio de destino existe en la instancia local, Service Broker utiliza esta ruta y entrega el mensaje a ese servicio. Sin embargo, si el servicio de destino no existe en la instancia local, Service Broker elige ExternalRoute.

Para las conversaciones que llegan desde fuera de la instancia, AutoCreatedLocal es la única ruta en msdb.sys.routes. Esta ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio del mensaje no existe en la instancia local, se quita el mensaje.

Ejemplo 5: Ruta de red a instancias diferentes de un servicio

En este ejemplo se muestra una configuración de enrutamiento donde dos direcciones de red distintas hospedan instancias diferentes del mismo servicio. Esta configuración puede ser útil para una configuración de equilibrio de carga.

En este ejemplo, la AdventureWorks2008R2 base de datos contiene la AutoCreatedLocal ruta, así como las rutas al servicio BalancedService.

Columna AdventureWorks2008R2 AdventureWorks2008R2 AdventureWorks2008R2 msdb
name AutoCreatedLocal BalancedRouteOne BalancedRouteTwo AutoCreatedLocal
remote_service_name NULL BalancedService BalancedService NULL
broker_instance NULL 5fb8d92b-ed69-4c80-afbb-2aa6a7d3cb2d 81b1d3d0-288e-4d2c-b1d3-456cbb944b4f NULL
address LOCAL TCP://server1.Adventure-Works.com:4022/ TCP://server2.Adventure-Works.com:4022/ LOCAL
mirror_address NULL NULL NULL NULL

Para las conversaciones creadas en la base de datos AdventureWorks2008R2 para el servicio BalancedService que no especifican un identificador de Service Broker, el conjunto de rutas coincidentes contiene ya sea BalancedRouteOne o BalancedRouteTwo. Dado que las rutas contienen distintos identificadores de Service Broker, el proceso de coincidencia selecciona arbitrariamente un identificador de Service Broker y coincide con esa ruta. Dado que solo una ruta coincide, Service Broker elige esa ruta para la conversación. El resultado es que algunas conversaciones se enrutan a TCP://server1.Adventure-Works.com:4022/y otras conversaciones se enrutan a TCP://server2.Adventure-Works.com:4022/. Sin embargo, una vez que Service Broker recibe la confirmación de un mensaje de una conversación, utiliza el identificador de Service Broker que contiene la confirmación para otros mensajes de la conversación. Una vez recibida la primera confirmación, todos los mensajes futuros de la conversación se enrutan por medio del identificador de Service Broker de la confirmación.

Para las conversaciones creadas en la AdventureWorks2008R2 base de datos al servicio BalancedService que especifican uno de los identificadores de Service Broker en la tabla de enrutamiento, el conjunto de rutas coincidentes contiene la ruta que coincide con el identificador de Service Broker. La conversación se enruta a la dirección de la ruta con ese identificador de Service Broker.

En el caso de las conversaciones creadas en AdventureWorks2008R2 para un servicio de destino diferente, el conjunto de rutas coincidentes solo contiene AutoCreatedLocal. Service Broker elige esa ruta. Si el servicio del mensaje no existe en la instancia local, Service Broker marca la conversación DELAYED.

Para las conversaciones que llegan desde fuera de la instancia, AutoCreatedLocal es la única ruta en msdb.sys.routes. Esta ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio del mensaje no existe en la instancia local, se quita el mensaje.

Ejemplo 6: reenvío de mensajes para un servicio específico

En este ejemplo se reenvía mensajes desde fuera de la instancia local al servicio ElsewhereService a la dirección TCP://elsewhere.Adventure-Works.com:4022/de red . Para todos los demás servicios, Service Broker entrega los mensajes a un servicio en la instancia local o marca la conversación DELAYED si el servicio no existe en la instancia local.

Columna AdventureWorks2008R2 msdb msdb
name AutoCreatedLocal AutoCreatedLocal ForwardingRoute
remote_service_name NULL NULL ElsewhereService
broker_instance NULL NULL NULL
address LOCAL LOCAL TCP://elsewhere.Adventure-Works.com:4022/
mirror_address NULL NULL NULL

En el caso de las conversaciones creadas en AdventureWorks2008R2, AutoCreatedLocal es la única ruta de AdventureWorks2008R2.sys.routes. Esta ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio del mensaje no existe en la instancia local, Service Broker marca la conversación DELAYED. Una conversación creada en AdventureWorks2008R2 al servicio ElsewhereService no se enruta a TCP://elsewhere.Adventure-Works.com:4022/.

Para las conversaciones que llegan desde fuera de la instancia al servicio ElsewhereService, la ruta ForwardingRoute coincide exactamente con el nombre del servicio. Por lo tanto, ForwardingRoute es la única ruta del conjunto de rutas coincidentes y Service Broker elige esa ruta cuando el reenvío de mensajes está activado. Service Broker elige esta ruta incluso si la instancia local contiene el servicio ElsewhereService. Si el reenvío de mensajes está desactivado, Service Broker quita el mensaje.

Para las conversaciones que llegan desde fuera de la instancia a todos los demás servicios, AutoCreatedLocal es la única ruta coincidente en msdb.sys.routes. Service Broker elige esa ruta. Si el servicio del mensaje no existe en la instancia local, se quita el mensaje.

Ejemplo 7: reenvío de mensajes para todos los servicios que no están en la instancia

En este ejemplo se envían mensajes desde fuera de la instancia local a una instancia distinta a no ser que el servicio exista en la instancia local. Los mensajes de todos los servicios externos van a la misma dirección de red. Esta configuración puede ser útil para el reenvío de mensajes.

Columna AdventureWorks2008R2 msdb msdb
name AutoCreatedLocal AutoCreatedLocal ForwardingRoute
remote_service_name NULL NULL NULL
broker_instance NULL NULL NULL
address LOCAL LOCAL TCP://forwarding.Adventure-Works.com:4022/
mirror_address NULL NULL NULL

En el caso de las conversaciones creadas en AdventureWorks2008R2, AutoCreatedLocal es la única ruta de AdventureWorks2008R2.sys.routes. Esta ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio del mensaje no existe en la instancia local, Service Broker marca la conversación DELAYED.

En el caso de las conversaciones que llegan desde fuera de la base de datos, el conjunto de rutas que coinciden contiene tanto AutoCreatedLocal como ForwardingRoute, porque ambas rutas especifican el mismo nombre de servicio remoto y el identificador del Service Broker. Service Broker debe elegir entre estas dos rutas. Service Broker elige rutas con la dirección 'LOCAL' antes de las rutas que especifican una dirección de red, por lo que Service Broker elige AutoCreatedLocalprimero . Si el servicio de destino existe en la instancia local, Service Broker utiliza esta ruta y entrega el mensaje a ese servicio. Sin embargo, si el servicio de destino no existe en la instancia local y el reenvío de mensajes está activado, Service Broker elige ForwardingRoute. Si el reenvío de mensajes no está activado, Service Broker quita el mensaje si el servicio de destino no existe en la instancia local.