Arrêt et redémarrage des applications Service Broker

Il peut parfois se révéler nécessaire d'arrêter une application Service Broker. Vous pouvez, par exemple, interrompre une application occupée pour installer une version mise à jour de la procédure stockée d'activation pour la file d'attente. En effet, même si vous pouvez modifier la file d'attente sans interrompre l'application, les exemplaires de cette procédure stockée d'activation qui sont en cours d'exécution peuvent ne jamais manquer de messages à traiter et donc ne jamais se fermer. Dans ce cas, le fait d'interrompre la file d'attente provoque l'arrêt immédiat des procédures stockées actives. Dès que vous redémarrez le service, Service Broker lance la procédure stockée d'activation qui a été mise à jour.

Les informations réunies dans cette section permettent d'arrêter temporairement une application à des fins de maintenance. Pour plus d'informations sur la suppression permanente d'un service de la base de données, consultez Désinstallation des applications Service Broker.

Pour suspendre temporairement un service, modifiez la file d'attente que l'application utilise de façon à la désactiver. En définissant l'état de cette file d'attente sur OFF, vous rendez la file d'attente indisponible pour toute opération de réception, ce qui interrompt l'activité de l'application. Service Broker ne remet plus aucun nouveau message dans la file d'attente et n'autorise plus aucune application à recevoir des messages de cette file d'attente. Lorsqu'une application tente de recevoir un message d'une file d'attente indisponible, elle reçoit une erreur Transact-SQL. Une application peut appeler à tout moment l'instruction END CONVERSATION sur une conversation, que la file d'attente utilisée par cette conversation soit disponible ou non. Toutefois, Service Broker ne remet pas le message de fin de dialogue au service distant tant que la file d'attente demeure indisponible.

Lorsqu'un message arrive pour une file d'attente arrêtée, Service Broker conserve le message dans la file d'attente de transmission pour la base de données jusqu'à ce que la file d'attente concernée redevienne disponible. Pour Service Broker, un message qui se présente pour être intégré dans une file d'attente arrêtée ne constitue pas une erreur, il ne prévient donc pas l'expéditeur. Lorsque la file d'attente est à nouveau disponible, Service Broker récupère les messages qu'il a stockés dans la file d'attente de transmission pour les remettre dans la file d'attente du service. Cette opération suit la logique normale en vigueur pour les tentatives de remise. Ces messages étant signalés comme retardés dans la file d'attente de transmission, des tentatives de livraison sont donc régulièrement effectuées. Service Broker conserve les messages dans la file d'attente de transmission et retarde leur livraison, qu'ils proviennent de la même instance que celle de la file d'attente ou qu'ils arrivent du réseau.

L'arrêt d'une file d'attente ne remet à zéro ni le minuteur de conversation, ni le minuteur de durée de vie du dialogue pour les messages situés dans la file d'attente. Si l'un des minuteurs termine son décompte tandis que la file d'attente est arrêtée, Service Broker crée automatiquement les messages appropriés au redémarrage de la file d'attente.

Pour redémarrer l'application, modifiez la file d'attente que l'application utilise pour activer son état (ON). La file d'attente redémarre grâce à cette action. Lorsqu'une procédure stockée d'activation est spécifiée pour la file d'attente et que cette file contient des messages, Service Broker lance immédiatement la procédure au redémarrage de la file d'attente. La file d'attente se trouvant désormais disponible, Service Broker génère également des messages pour les minuteurs de conversation et de durée de vie de dialogue dont le décompte s'est achevé pendant l'interruption de la file d'attente. Si l'application n'utilise pas la fonction d'activation, redémarrez-la à l'aide de la procédure de démarrage qui a été définie pour elle.