Files d’attente de requêtes

S’applique à :SQL ServerAzure SQL Managed Instance

Parfois, il peut être nécessaire d’inspecter le contenu d’une file d’attente dans son ensemble. Vous souhaiterez peut-être savoir combien de messages la file d’attente contient, ou vous souhaiterez peut-être vous assurer que l’application a traité tous les messages d’un service que vous êtes sur le point de mettre hors connexion. Vous devrez peut-être savoir pourquoi les messages ne sont pas traités par une application.

Pour obtenir ces informations, utilisez le nom de la file d’attente comme table source d’une SELECT instruction. Une SELECT instruction sur une file d’attente a le même format qu’une SELECT instruction sur une vue ou 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 SELECT instruction sur une file d’attente peut entraîner un blocage. Lorsque vous utilisez une instruction sur une SELECT file d’attente, spécifiez l’indicateur NOLOCK pour éviter de bloquer les applications qui utilisent la file d’attente. Pour obtenir une description des colonnes d’une file d’attente, consultez CREATE QUEUE.

Voici un exemple SELECT d’instruction pour déterminer le nombre de messages dans la file d’attente ExpenseQueue :

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

L’instruction suivante SELECT permet à l’administrateur d’apprendre si la file d’attente ExpenseQueue contient des messages 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. Bien que le nom d'une file d'attente puisse être utilisé à la place d'un nom de table dans une 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 sur des files d’attente.