Berichten bladeren of bekijken

Berichten bladeren, of peeken, stelt een Service Bus-client in staat alle berichten in een wachtrij of een abonnement op te sommen voor diagnostische en foutopsporingsdoeleinden.

De Peek-bewerking in een wachtrij of een abonnement retourneert maximaal het aangevraagde aantal berichten. In de volgende tabel ziet u de typen berichten die worden geretourneerd door de bewerking Peek.

Soort berichten Inbegrepen?
Actieve berichten Ja
Onbestelbare berichten Nee
Vergrendelde berichten Ja
Uitgestelde berichten Ja
Verlopen berichten Kan zijn (voordat ze naar de dead-letter queue worden verplaatst)
Geplande berichten Ja voor wachtrijen. Nee voor abonnementen

Onbestelbare berichten

Als u dead-letterberichten van een wachtrij of abonnement wilt bekijken, moet de peekbewerking worden uitgevoerd op de wachtrij met dode letters die is gekoppeld aan de wachtrij of het abonnement. Zie voor meer informatie toegang tot dead-letterqueues.

Verlopen berichten

Verlopen berichten kunnen worden opgenomen in de resultaten die zijn geretourneerd door de bewerking Peek. Verwerkte en verlopen berichten worden opgeschoond door een asynchrone 'garbage collection'-run. Deze stap vindt mogelijk niet direct plaats nadat berichten zijn verlopen. Daarom kan een peekbewerking berichten retourneren die al zijn verlopen. Deze berichten worden verwijderd of naar de dead-letter queue verplaatst wanneer de volgende keer een ontvangstbewerking op de wachtrij of het abonnement wordt uitgevoerd. Houd rekening met dit gedrag bij het ophalen van uitgestelde berichten uit de wachtrij.

Een verlopen bericht komt niet meer in aanmerking voor regulier ophalen op een andere manier, zelfs niet wanneer het wordt geretourneerd door Peek. Het retourneren van deze berichten is zoals ontworpen omdat Peek een diagnostisch hulpprogramma is dat de huidige status van het logboek weergeeft.

Vergrendelde berichten

Peek retourneert ook berichten die zijn vergrendeld en die momenteel door andere ontvangers worden verwerkt. Omdat Peek echter een niet-verbonden momentopname retourneert, kan de vergrendelingsstatus van een bericht niet worden waargenomen bij gepeekte berichten.

Uitgestelde berichten

Uitgestelde berichten blijven in de hoofdwachtrij, samen met alle andere actieve berichten (in tegenstelling tot berichten in een subqueue), maar ze kunnen niet meer worden ontvangen met behulp van de normale ontvangstbewerkingen. Uitgestelde berichten kunnen worden gedetecteerd via het doorbladeren van berichten als een toepassing deze niet meer bijhoudt.

Als u een uitgesteld bericht wilt ophalen, is de eigenaar ervan verantwoordelijk voor het onthouden van het volgnummer wanneer die het uitstelt. Elke ontvanger die het volgnummer van een uitgesteld bericht kent, kan het bericht later ontvangen met behulp van ontvangstmethoden die het volgnummer als parameter gebruiken. Zie Berichtvolgorde en tijdstempels voor meer informatie over volgnummers.

API's weergeven

Peek werkt met wachtrijen, abonnementen en de wachtrijen met dode letters daarvan.

Wanneer de peek-bewerking herhaaldelijk wordt aangeroepen, worden alle berichten in de wachtrij of het abonnement opgesomd, in volgorde, van het laagste beschikbare volgnummer naar het hoogste. Het is de volgorde waarin berichten in de wachtrij zijn geplaatst, niet de volgorde waarin berichten uiteindelijk kunnen worden opgehaald.

U kunt ook een SequenceNumber doorgeven aan een peek-bewerking. Het wordt gebruikt om te bepalen waar u moet previewen. U kunt vervolgende aanroepen van de peek-bewerking doen zonder de parameter op te geven om verder op te sommen.

Maximum aantal berichten

U kunt het maximum aantal berichten opgeven dat de peekbewerking moet retourneren. Maar er is geen manier om een minimale grootte voor de batch te garanderen. Het aantal geretourneerde berichten is afhankelijk van verschillende factoren waarvan de meest impactvolle is hoe snel het netwerk berichten naar de client kan streamen.

Hier volgt een voorbeeldfragment voor het bekijken van alle berichten met de .NET SDK. De SequenceNumber​ kan worden gebruikt om het laatst gepeekte bericht bij te houden en te beginnen met bladeren bij het volgende bericht.

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);
}

De volgende voorbeelduitvoer is afkomstig van het bekijken van een wachtrij met 13 berichten erin.

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

Probeer de voorbeelden in de taal van uw keuze om Azure Service Bus-functies te verkennen.