Detener e iniciar aplicaciones de Service Broker

A veces puede ser necesario detener temporalmente una aplicación de Service Broker. Por ejemplo, puede detener una aplicación ocupada para instalar una versión actualizada del procedimiento almacenado de activación para la cola. Aunque puede modificar la cola sin detener la aplicación, puede que las copias del procedimiento almacenado de activación que están en ejecución siempre tengan mensajes para procesar y, por tanto, no salgan nunca. En este caso, detener la cola provoca que los procedimientos almacenados en ejecución salgan inmediatamente. Cuando vuelve a iniciar el servicio, Service Broker inicia el procedimiento almacenado de activación actualizado.

La información de esta sección se aplica a la parada temporal de una aplicación para su mantenimiento. Para obtener información sobre cómo eliminar permanentemente un servicio de la base de datos, veaDesinstalar aplicaciones de Service Broker.

Para detener temporalmente un servicio, modifique la cola que utiliza la aplicación para que su estado sea OFF. Cuando el estado de la cola está establecido en OFF, la cola no está disponible para recibir operaciones y, por tanto, detiene la aplicación. Service Broker no entrega mensajes nuevos a la cola y no permite que una aplicación reciba mensajes desde la cola. Cuando una aplicación intenta recibir un mensaje desde una cola que no está disponible, la aplicación recibe un error de Transact-SQL. Una aplicación puede llamar a END CONVERSATION en cualquier momento, independientemente de si la cola que utiliza la conversación está o no disponible. Sin embargo, Service Broker no entrega el mensaje End Dialog al servicio remoto hasta que la cola está disponible.

Cuando un mensaje llega a una cola detenida, Service Broker mantiene el mensaje en la cola de transmisión de la base de datos hasta que la cola de destino está disponible. Service Broker no considera un mensaje que llega a una cola detenida como un error y no lo notifica al remitente. Cuando la cola está disponible, Service Broker entrega los mensajes de la cola de transmisión a la cola de servicio. Esta entrega utiliza la lógica de reintento normal para los mensajes. Los mensajes están marcados como DELAYED en la cola de transmisión y se reintentan de forma periódica. Service Broker mantiene el mensaje en la cola de transmisión y retrasa el mensaje independientemente de si éste se origina en la misma instancia que la cola o procede de la red.

Detener una cola no restablece el temporizador de conversación ni el temporizador de vigencia del diálogo de los mensajes de la cola. Si algún temporizador caduca mientras la cola está detenida, Service Broker genera los mensajes correspondientes cuando la cola vuelve a iniciarse.

Para reiniciar la aplicación, modifique la cola que utiliza la aplicación para que su estado sea ON. Esta acción inicia la cola. Cuando la cola tiene un procedimiento almacenado de activación especificado y contiene mensajes, Service Broker inicia de forma inmediata el procedimiento almacenado de activación cuando se inicia la cola. Dado que la cola ya está disponible, Service Broker también genera mensajes de los temporizadores de conversación y temporizadores de vigencia de diálogo que han caducado mientras la cola estaba detenida. Para una aplicación que no utiliza activación, reinicie la aplicación con el procedimiento de inicio definido para esa aplicación.