Nachrichten konsumieren
Nachrichten aus einer Queue und ihren Kanälen konsumieren
Für das Konsumieren von Nachrichten sind Berechtigungen für die Queue und Zugriff auf den zugehörigen Nachrichtenendpunkt erforderlich.
Eine Antwort auf eine GetMessages
-Anforderung enthält die Liste der Nachrichten mit Payload, Nachrichten-ID, Ablaufzeit, Sichtbarkeitstimeout, Zustellungsanzahl und Empfang (receipt
). Die maximale Anzahl von Nachrichten, die in einer Antwort zurückgegeben werden können, beträgt 20. Die tatsächliche Anzahl der zurückgegebenen Nachrichten hängt jedoch von der Anzahl der verfügbaren Nachrichten und davon ab, ob die Anforderung Langes Polling verwendet hat.
Consumers sind für das Aktualisieren von Nachrichten und das Löschen von Nachrichten verantwortlich. Hierfür ist der Empfang (receipt
) der Nachricht erforderlich.
Nachrichten sperren
Consumer können eine aus der Queue abgerufene Nachricht "sperren", sodass sie nicht von einem anderen Consumer abgerufen werden kann. Nachrichten werden durch Angeben eines Sichtbarkeitstimeouts gesperrt. Die Queue-API verwendet den Parameter visibilityInSeconds
, um diesen Wert festzulegen.
Der Sichtbarkeitstimeout kann beim Erstellen einer Queue auf Queueebene festgelegt oder beim Konsumieren oder Aktualisieren von Nachrichten angegeben werden. Wenn ein Consumer Schwierigkeiten beim erfolgreichen Verarbeiten einer Nachricht hat, kann er die Nachricht aktualisieren, um ihre Unsichtbarkeit zu verlängern. Wenn die Sichtbarkeitstimeout einer Nachricht noch nicht verlängert ist und der Consumer die Nachricht noch nicht löscht, wird sie wieder in die Queue gestellt.
Beim Konsumieren müssen Sie den Sichtbarkeitstimeout nicht angeben. Der für die Queue konfigurierte Sichtbarkeitstimeout gilt für die Anforderung. Beim Erstellen einer Queue beträgt der Standardsichtbarkeitstimeout 30 Sekunden. Wenn Sie den optionalen Timeoutparameter für die Sichtbarkeit in eine Anforderung aufnehmen, können Sie einen Mindestwert von 0 Sekunden und einen Höchstwert von 12 Stunden angeben.
Die Verwendung eines Sichtbarkeitstimeouts von 0 dient quasi als Peek-Funktionalität. Auf diese Weise abgerufene Nachrichten werden in der Regel an einen anderen Consumer zugestellt, da sich die Sichtbarkeit nicht ändert.
Zustellungsanzahl
Jedes Mal, wenn eine Nachricht mit einer GetMessages
-Anforderung oder durch Polling der Konsole abgerufen wird, erhöht sich die Zustellungsanzahl. Wenn die Zustellungsanzahl den konfigurierten Höchstwert der Queue überschreitet, wird die Nachricht an die Dead-Letter Queue gesendet.
Langes Polling
Standardmäßig wird in einer GetMessages
-Anforderung langes Polling verwendet. Die Anforderung wartet 30 Sekunden auf Nachrichten. Wenn der Timeout abläuft und keine Nachrichten zum Konsumieren verfügbar sind, gibt die Anforderung eine leere Antwort zurück. Langes Polling ist hilfreich, um enge Wiederholungsschleifen bei leeren Antworten zu vermeiden.
Consumer können dieses Verhalten ändern, indem sie den Parameter timeoutInSeconds
in ihre Anforderung aufnehmen, der Werte von 0 bis 30 Sekunden akzeptiert. Wenn Sie den Wert timeoutInSeconds
auf 0 setzen, wird eine sofortige Antwort der Queue angezeigt, unabhängig davon, ob Nachrichten verfügbar sind oder nicht.