Parcourir ou afficher les messages

Le parcours des messages, ou « Peek », permet à un client Service Bus d’énumérer tous les messages d’une file d’attente ou d’un abonnement, à des fins de diagnostic et de débogage.

L’opération Peek sur une file d’attente ou un abonnement retourne le plus grand nombre de messages demandé. Le tableau suivant indique les types de messages retournés par l’opération Peek.

Type de message Inclus ?
Messages actifs Oui
Messages de lettres mortes Non
Messages verrouillés Oui
Messages différés Oui
Messages arrivés à expiration Peut-être (avant qu’ils ne soient lettres mortes)
Messages planifiés Oui pour les files d’attente. Non pour les abonnements

Messages de lettres mortes

Pour afficher un aperçu des messages non distribués mis en file d’attente d’une file d’attente ou d’un abonnement, l’opération Peek doit être exécutée sur la file d’attente des messages non distribués associée à la file d’attente ou à l’abonnement. Pour plus d’informations, consultez Accès aux files d’attente de messages non distribués.

Messages arrivés à expiration

Les messages expirés peuvent être inclus dans les résultats retournés à partir de l’opération Peek. Les messages utilisés et arrivés à expiration sont nettoyés par une exécution « nettoyage de la mémoire » asynchrone. Cette étape peut ne pas nécessairement se produire immédiatement après l’expiration des messages. C’est pourquoi une opération d’aperçu peut renvoyer des messages qui ont déjà expiré. Ces messages seront supprimés ou mis en file d’attente de lettres mortes la prochaine fois qu’une opération de réception sera appelée sur la file d’attente ou l’abonnement. Gardez ce comportement à l’esprit lorsque vous tentez de récupérer des messages différés de la file d’attente.

Un message arrivé à expiration n’est plus éligible pour la récupération normale par d’autres moyens, même quand il est retourné par Peek. Le renvoi de ces messages est délibéré, car Peek est un outil de diagnostic reflétant l’état actuel du journal.

Messages verrouillés

Peek renvoie également les messages qui ont été verrouillés et qui sont actuellement traités par d’autres destinataires. Toutefois, étant donné que Peek renvoie un instantané déconnecté, l’état de verrou d’un message ne peut pas être observé sur des messages aperçus.

Messages différés

Les messages reportés restent dans la file d’attente principale avec tous les autres messages actifs (contrairement aux messages de type lettres mortes qui se trouvent dans une sous-file d’attente), mais ils ne peuvent plus être reçus à l’aide des opérations de réception habituelles. Les messages reportés peuvent être détectés via la navigation dans les messages si une application perd leur trace.

Pour récupérer un message différé, son propriétaire doit se souvenir du numéro de séquence au moment du report. Tout destinataire qui connaît le numéro de séquence d’un message reporté peut ultérieurement recevoir le message en utilisant les méthodes de réception qui prennent le numéro de séquence comme paramètre. Pour plus d’informations sur les numéros de séquence, consultez Séquencement et horodatage des messages.

API de l’outil Peek

Peek fonctionne sur les files d’attente, les abonnements et leurs files d’attente de messages non distribués respectives.

Lorsqu’elle est appelée à plusieurs reprises, l’opération Peek énumère tous les messages de la file d’attente ou de l’abonnement, du plus petit numéro de séquence disponible au plus grand. C’est l’ordre dans lequel les messages ont été empilés, et non l’ordre dans lequel ils peuvent être récupérés au final.

Vous pouvez également transmettre un SequenceNumber à une opération Peek. Il permet de déterminer où commencer l’aperçu. Vous pouvez effectuer des appels ultérieurs à l’opération Peek sans spécifier le paramètre à énumérer.

Nombre maximal de messages

Vous pouvez spécifier le nombre maximal de messages que vous souhaitez que l’opération d’aperçu retourne. Mais il n’existe aucun moyen de garantir une taille minimale pour le lot. Le nombre de messages retournés dépend de plusieurs facteurs dont le plus impactant est la rapidité avec laquelle le réseau peut diffuser des messages vers le client. 

Voici un exemple d’extrait de code permettant d’examiner tous les messages avec le Kit de développement logiciel (SDK) Python Service Bus. Le sequence_number​ peut être utilisé pour suivre le dernier message aperçu et commencer à parcourir le message suivant.

using Azure.Messaging.ServiceBus;

// Create a Service Bus client for your namespace
ServiceBusClient client = new ServiceBusClient("NAMESPACECONNECTIONSTRING");

// Create Service Bus receiver for your queue in the namespace
ServiceBusReceiver receiver = client.CreateReceiver("QUEUENAME");

// Peek operation with max count set to 5
var peekedMessages = await receiver.PeekMessagesAsync(maxMessages: 5);

// Keep receiving while there are messages in the queue
while (peekedMessages.Count > 0)
{
    int counter = 0; // To get the sequence number of the last peeked message
    int countPeekedMessages = peekedMessages.Count;

    if (countPeekedMessages > 0)
    { 
        // For each peeked message, print the message body
        foreach (ServiceBusReceivedMessage msg in peekedMessages)
        {
            Console.WriteLine(msg.Body);
            counter++;
        }
        Console.WriteLine("Peek round complete");
        Console.WriteLine("");
    }

    // Start receiving from the message after the last one
    var fromSeqNum = peekedMessages[counter-1].SequenceNumber + 1;
    peekedMessages = await receiver.PeekMessagesAsync(maxMessages: 5, fromSequenceNumber: fromSeqNum);
}

L’exemple de sortie suivant provient de l’aperçu d’une file d’attente contenant 13 messages.

Message 1
Message 2
Message 3
Message 4
Message 5
Peek round complete

Message 6
Message 7
Message 8
Message 9
Message 10
Peek round complete

Message 11
Message 12
Message 13
Peek round complete

Essayez les exemples dans le langage de votre choix pour explorer les fonctionnalités d’Azure Service Bus.

Recherchez des exemples pour les anciennes bibliothèques clientes .NET et Java ici :

Le 30 septembre 2026, nous retirerons les bibliothèques WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus et com.microsoft.azure.servicebus du kit de développement logiciel (SDK) Azure Service Bus, qui ne sont pas conformes aux directives du kit de développement logiciel (SDK) Azure. Nous mettrons également fin à la prise en charge du protocole SBMP. Vous ne pourrez donc plus utiliser ce protocole après le 30 septembre 2026. Migrez vers les dernières bibliothèques du kit de développement logiciel (SDK) Azure, qui offre des correctifs de sécurité critiques et des fonctionnalités améliorées, avant cette date.

Bien que les anciennes bibliothèques puissent toujours être utilisées au-delà du 30 septembre 2026, elles ne seront plus prises en charge officiellement et mises à jour par Microsoft. Pour plus d’informations, consultez l’annonce concernant l’arrêt de la prise en charge.