Ejemplos de enrutamiento de Service Broker

Esta sección presenta ejemplos del proceso de enrutamiento de Service Broker. Cada ejemplo contiene tablas de enrutamiento de ejemplo para AdventureWorks y msdb, y describe cómo utiliza Service Broker estas tablas de enrutamiento para elegir una ruta para el mensaje.

Las tablas de enrutamiento presentadas en este tema son versiones simplificadas de la vista de catálogo sys.routes. El Id. de ruta y el propietario no son relevantes para el proceso de enrutamiento; además se considera que todas las rutas tienen una vigencia indefinida.

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

Los ejemplos de mensajes salientes no utilizan la tabla de enrutamiento de msdb y los ejemplos de los mensajes entrantes y del reenvío de mensajes no utilizan la tabla de enrutamiento de AdventureWorks.

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 ruta AutoCreatedLocal. Por tanto, las tablas de enrutamiento de AdventureWorks y msdb contienen la siguiente información.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

En este caso, todos los diálogos creados en la base de datos AdventureWorks 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.

Para las conversaciones creadas en AdventureWorks, AutoCreatedLocal es la única ruta de AdventureWorks.sys.routes. Esa ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio para el mensaje no existe en la instancia local, el mensaje se quita.

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

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, AdventureWorks contiene una ruta para el servicio OrderParts. La ruta contiene una dirección de red para el servicio OrderParts.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

OrderPartsRoute

OrderParts

NULL

tcp://host2.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

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

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

Para las conversaciones creadas en AdventureWorks a un servicio de destino distinto, el conjunto de rutas coincidentes contiene AutoCreatedLocal. Como ésta es la única ruta del conjunto de rutas coincidentes, Service Broker la elige. Si el servicio para el mensaje no existe en la instancia local, Service Broker marca la conversación como DELAYED.

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

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 alojado 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, AdventureWorks contiene una ruta para el servicio OrderParts. La ruta contiene una dirección de red y una dirección reflejada para el servicio OrderParts.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

OrderPartsRoute

OrderParts

NULL

tcp://partner1.Adventure-Works.com:4022/

tcp://partner2.Adventure-Works.com:4022/

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Para las conversaciones creadas en AdventureWorks con un servicio de destino de OrderParts, el conjunto de rutas coincidentes contiene OrderPartsRoute, ya que esta ruta coincide exactamente con el nombre de servicio. OrderPartsRoute es la única ruta del conjunto de rutas coincidentes, por eso Service Broker elige esa ruta. Service Broker comprueba la dirección y la dirección reflejada para determinar qué asociado es la entidad de seguridad y, a continuación, envía el mensaje a la entidad de seguridad.

Para las conversaciones creadas en AdventureWorks a un servicio de destino distinto, el conjunto de rutas coincidentes contiene AutoCreatedLocal. Como ésta es la única ruta del conjunto de rutas coincidentes, Service Broker la elige. Si el servicio para el mensaje no existe en la instancia local, Service Broker marca la conversación como DELAYED.

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

Ejemplo 4: Ruta de red a todos los servicios externos

En este ejemplo se envían mensajes desde los servicios de AdventureWorks a una instancia distinta a no ser que el servicio exista en la instancia local. Observe que los mensajes para cualquier servicio que no se encuentra 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 base de datos AdventureWorks contiene la ruta AutoCreatedLocal así como una ruta a la dirección tcp://forwarding.Adventure-Works.com:4022/.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ExternalRoute

NULL

NULL

tcp://forwarding.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Para las conversaciones creadas en AdventureWorks, el conjunto de rutas coincidentes contiene AutoCreatedLocal y ExternalRoute, ya que el nombre de servicio remoto y la instancia de broker es igual para ambas rutas. Service Broker debe elegir entre estas dos rutas. Service Broker elige rutas con la dirección 'LOCAL' antes que rutas que especifican una dirección de red, por lo que Service Broker elige primero AutoCreatedLocal. 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 de msdb.sys.routes. Esta ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio para el mensaje no existe en la instancia local, el mensaje se quita.

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

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

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

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

BalancedRouteOne

BalancedService

5fb8d92b-ed69-4c80-afbb-2aa6a7d3cb2d

tcp://server1.Adventure-Works.com:4022/

NULL

BalancedRouteTwo

BalancedService

81b1d3d0-288e-4d2c-b1d3-456cbb944b4f

tcp://server2.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Para las conversaciones creadas en la base de datos AdventureWorks al servicio BalancedService que no especifican ningún identificador de Service Broker, el conjunto de rutas coincidentes contiene BalancedRouteOne o BalancedRouteTwo. Dado que las rutas contienen distintos identificadores de Service Broker, el proceso de coincidencia selecciona de forma arbitraria un identificador de Service Broker y establece coincidencias con esa ruta. Puesto que sólo coincide una ruta, 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 a tcp://server2.Adventure-Works.com:4022/. Sin embargo, una vez que Service Broker recibe un reconocimiento para un mensaje de una conversación, utiliza el identificador de Service Broker contenido en el reconocimiento para otros mensajes de la conversación. Una vez recibido el primer reconocimiento, todos los mensajes futuros de la conversación se enrutan mediante el identificador de Service Broker del reconocimiento.

Para las conversaciones creadas en la base de datos AdventureWorks al servicio BalancedService que especifica 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.

Para las conversaciones creadas en AdventureWorks a un servicio de destino distinto, el conjunto de rutas coincidentes contiene sólo AutoCreatedLocal. Service Broker elige esa ruta. Si el servicio para el mensaje no existe en la instancia local, Service Broker marca la conversación como DELAYED.

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

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

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

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ForwardingRoute

ElsewhereService

NULL

tcp://elsewhere.Adventure-Works.com:4022/

NULL

Para las conversaciones creadas en AdventureWorks, AutoCreatedLocal es la única ruta de AdventureWorks.sys.routes. Esta ruta es la única en el conjunto de rutas coincidentes, y Service Broker la elige. Si el servicio para el mensaje no existe en la instancia local, Service Broker marca la conversación como DELAYED. Observe que una conversación creada en AdventureWorks 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 de servicio. Por lo tanto, ForwardingRoute es la única ruta del conjunto de caracteres 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 de msdb.sys.routes. Service Broker elige esa ruta. Si el servicio para el mensaje no existe en la instancia local, el mensaje se quita.

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. Observe que los mensajes para todos los servicios externos van a la misma dirección de red. Esta configuración puede resultar útil para el reenvío de mensajes.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ForwardingRoute

NULL

NULL

tcp://forwarding.Adventure-Works.com:4022/

NULL

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

Para las conversaciones que llegan desde fuera de la base de datos, el conjunto de rutas coincidentes contiene AutoCreatedLocal y ForwardingRoute, ya que ambas rutas especifican el mismo nombre de servicio remoto y el mismo identificador de Service Broker. Service Broker debe elegir entre estas dos rutas. Service Broker elige rutas con la dirección 'LOCAL' antes que rutas que especifican una dirección de red, por lo que Service Broker elige primero AutoCreatedLocal. 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.