Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Einsehen von Nachrichten ermöglicht einem Service Bus-Client, alle Nachrichten in einer Warteschlange oder einem Abonnement zu Diagnose- und Debugzwecken aufzuzählen.
Der Peek-Vorgang für eine Warteschlange oder ein Abonnement gibt höchstens die angeforderte Anzahl von Nachrichten zurück. Die folgende Tabelle zeigt die Typen von Nachrichten, die vom Peek-Vorgang zurückgegeben werden.
| Typen von Nachrichten | Enthalten? |
|---|---|
| Aktive Nachrichten | Ja |
| Unzustellbare Nachrichten | Nein |
| Gesperrte Nachrichten | Ja |
| Verzögerte Nachrichten | Ja |
| Abgelaufene Nachrichten | Möglicherweise (bevor sie in die Dead-Letter-Warteschlange verschoben werden) |
| Geplante Nachrichten | Ja für Warteschlangen. Keine Abonnements |
Unzustellbare Nachrichten
Um einen Einblick in Dead-Letter-Nachrichten einer Warteschlange oder eines Abonnements zu erhalten, sollte der Peek-Vorgang in der Dead-Letter-Warteschlange ausgeführt werden, die der Warteschlange oder dem Abonnement zugeordnet ist. Weitere Informationen finden Sie unter Zugreifen auf Warteschlangen für unzustellbare Nachrichten.
Abgelaufene Nachrichten
Abgelaufene Nachrichten können in den Ergebnissen enthalten sein, die vom Peek-Vorgang zurückgegeben werden. Verarbeitete und abgelaufene Nachrichten werden durch eine asynchrone Ausführung von „Garbage Collection“ bereinigt. Dieser Schritt tritt möglicherweise nicht unmittelbar nach dem Ablauf von Nachrichten auf. Deshalb kann ein Peek-Vorgang Nachrichten zurückgeben, die bereits abgelaufen sind. Diese Nachrichten werden entfernt oder in die Warteschlange für unzustellbare Nachrichten verschoben, wenn das nächste Mal ein Empfangsvorgang für die Warteschlange oder das Abonnement aufgerufen wird. Beachten Sie dieses Verhalten, wenn Sie versuchen, verzögerte Nachrichten aus der Warteschlange wiederherzustellen.
Eine abgelaufene Nachricht kann nicht mehr auf andere Weise regelmäßig abgerufen werden, selbst wenn sie von Peek zurückgegeben wird. Die Rückgabe dieser Nachrichten ist beabsichtigt, da Peek ein Diagnosetool ist, das den aktuellen Status des Protokolls widerspiegelt.
Gesperrte Nachrichten
Peek gibt auch Nachrichten zurück, die gesperrt sind und aktuell von anderen Empfängern verarbeitet werden. Da Peek jedoch eine getrennte Momentaufnahme zurückgibt, kann der Sperrzustand einer Nachricht für per Peek abgerufene Nachrichten nicht beobachtet werden.
Zurückgestellte Nachrichten
Verzögerte Nachrichten verbleiben im Gegensatz zu unzustellbaren Nachrichten, die sich in einer Unterwarteschlange befinden, mit allen anderen aktiven Nachrichten in der Hauptwarteschlange, können jedoch nicht mehr mithilfe der regulären Empfangsfunktionen empfangen werden. Verzögerte Nachrichten können über das Message-Browsing ermittelt werden, wenn eine Anwendung diese nicht mehr findet.
Zum Abrufen einer verzögerten Nachricht muss sich deren Besitzer die Sequenznummer beim Verzögern merken. Jeder Empfänger, der die Sequenznummer einer verzögerten Nachricht kennt, kann die Nachricht später mithilfe von Empfangsmethoden empfangen, die die Sequenznummer als Parameter verwenden. Weitere Informationen zu Sequenznummern finden Sie unter Nachrichtensequenzierung und Zeitstempel.
Peek-APIs
Peek funktioniert mit Warteschlangen, Abonnements und ihren Warteschlangen für unzustellbare Nachrichten.
Bei wiederholtem Aufruf listet der Peek-Vorgang alle Nachrichten in der Warteschlange oder dem Abonnement auf, und zwar in der Reihenfolge der Sequenznummern von der niedrigsten verfügbaren bis zur höchsten. Dies ist die Reihenfolge, in der Nachrichten in die Warteschlange gestellt wurden, und nicht die Reihenfolge, in der Nachrichten möglicherweise schließlich abgerufen werden.
Sie können auch „SequenceNumber“ an einen Peek-Vorgang übergeben. Wird verwendet, um zu bestimmen, wo der Peek-Vorgang beginnen soll. Sie können nachfolgende Aufrufe des Peek-Vorgangs vornehmen, ohne den Parameter anzugeben, um weiter zu enumerieren.
Maximale Anzahl der Nachrichten
Sie können die maximale Anzahl von Nachrichten angeben, die der Peek-Vorgang zurückgeben soll. Es gibt jedoch keine Möglichkeit, eine Mindestgröße für den Batch zu garantieren. Die Anzahl der zurückgegebenen Nachrichten hängt von mehreren Faktoren ab, von denen der wichtigste ist, wie schnell das Netzwerk Nachrichten an den Client weiterleiten kann.
Hier ist ein Beispielausschnitt zum Einsehen aller Nachrichten mit dem .NET SDK.
SequenceNumber kann verwendet werden, um die letzte eingesehene Nachricht nachzuverfolgen und mit dem Browsen bei der nächsten Nachricht zu beginnen.
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);
}
Die folgende Beispielausgabe stammt vom Einsehen einer Warteschlange mit 13 Nachrichten.
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
Verwandte Inhalte
Sehen Sie sich die Codebeispiele in der Sprache Ihrer Wahl an, um Azure Service Bus-Features zu untersuchen.
- Azure Service Bus Clientbibliotheksbeispiele für .NET (neueste Version) - - Beispiel Senden und Empfangen von Nachrichten.
- Azure Service Bus-Clientbibliotheksbeispiele für Java (neueste Version) - Beispiel: Einsehen einer Nachricht
- Azure Service Bus-Clientbibliotheksbeispiele für Python - receive_peek.py-Beispiel
- Azure Service Bus-Clientbibliotheksbeispiele für JavaScript - browseMessages.js-Beispiel
- Azure Service Bus-Clientbibliotheksbeispiele für TypeScript - browseMessages.ts-Beispiel