Interrogation des files d'attente

Il est quelquefois nécessaire d'inspecter l'ensemble du contenu d'une file d'attente. Par exemple, pour savoir combien de messages sont présents dans la file d'attente ou pour s'assurer que l'application a bien traité tous les messages du service que vous êtes sur le point de déconnecter. Pour savoir aussi pourquoi les messages ne sont pas actuellement traités par une application.

Pour obtenir toutes ces informations, utilisez le nom de la file d'attente comme table source d'une instruction SELECT. Dans une file d'attente, cette instruction possède le même format qu'une instruction SELECT dans une vue ou dans une table.

Notes

Service Broker est conçu pour autoriser plusieurs lecteurs de file d'attente afin d'assurer efficacement la réception des messages dans une file d'attente. Toutefois, une instruction SELECT peut provoquer des blocages dans une file d'attente. Vous devez donc spécifier l'indicateur NOLOCK pour éviter de bloquer les applications qui utilisent la file d'attente lorsque vous utilisez l'instruction SELECT.

Pour obtenir la description des colonnes d'une file d'attente, consultez CREATE QUEUE (Transact-SQL).

L'exemple suivant illustre l'utilisation de l'instruction SELECT pour connaître le nombre de messages présents dans la file d'attente ExpenseQueue:

SELECT COUNT(*) FROM dbo.ExpenseQueue WITH (NOLOCK) ;

L'instruction SELECT suivante permet de tenir l'administrateur informé de la présence éventuelle de messages dans la file d'attente ExpenseQueue pour le service //Adventure-Works.com/AccountsPayable/Expenses:

IF EXISTS(SELECT * FROM dbo.ExpenseQueue WITH (NOLOCK) WHERE
          service_name = '//Adventure-Works.com/AccountsPayable/Expenses')
  PRINT 'The queue contains messages for ' +
        '//Adventure-Works.com/AccountsPayable/Expenses'
ELSE
  PRINT 'The queue does not contain messages for ' +
        '//Adventure-Works.com/AccountsPayable/Expenses' ;

Service Broker gère les mises à jour des files d'attente. Même si le nom d'une file d'attente peut se substituer à un nom de table dans l'instruction SELECT, une file d'attente ne peut pas être la cible d'une instruction INSERT, UPDATE, DELETE ou TRUNCATE. SQL Server n'autorise pas les utilisateurs à créer des index dans les files d'attente.