AMQP: Anerkennung und prefetching
Ich versuche zu verstehen, einige Aspekte des AMQP-Protokoll. Derzeit habe ich ein Projekt mit RabbitMQ und Nutzung von python-pika-Bibliothek. Also Frage ist im Hinblick auf die Anerkennung und die Nachricht prefetching.
-
Betrachten wir eine Warteschlange mit nur Verbraucher (sicher ist dieses queue wurde erklärt wie exklusive). Also verstehe ich richtig: egal, ob ich verbrauchen mit oder ohne ack-flag? Trotzdem sollte ich nicht verarbeiten zu können, werden mehrere Nachrichten gleichzeitig und es gibt keine anderen Verbraucher, die konnte nehmen einige andere noch die Nachrichten in der Warteschlange. Sogar besser, nicht zu drehen Sie die Bestätigung auf, da diese möglicherweise reduzieren kann AMQP-server zu laden.
-
Prefetch-count bedeutet gar nichts, wenn es keine Bestätigung. Richtig?
-
Ich bin nicht sicher, wie dieses Verfahren funktioniert. Ich habe ein callback auf neue Nachricht und in seinem schließlich Aussage, die ich bestätigen oder ablehnen der Nachricht. Dies ist die einzige Funktion, und egal, wie groß die prefetch zählen wäre - sowieso eine andere Nachricht, die nicht verarbeitet werden, bis die aktuelle fertig ist. Warum sollte ich also ändern müssen prefetch_count Wert?
vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
autoack
flag nicht gesetzt, wenn Ihre Anwendung ist fehlgeschlagen, während der message-Verarbeitung aller empfangenen Nachrichten verloren gehen. Wenn eine solche situation sehr selten, und message zu verlieren ist die entsprechende option in Ihrer Anwendung (zum Beispiel, aber nicht beschränkt auf, Protokolle Bearbeitung) Sie können autoack aus.Und ja, mit
autoack
unset erfordert einfachere broker Logik, so dass es verwendet weniger Ressourcen.Als zu
prefetch count
(undprefetch size
), diese broker Optionen sagen, wie groß vielleicht die Nutzlast, die gesendet werden, um Kunden im Voraus, um die einzelne Nachricht. Normalerweise wird es benutzt, um Zeit zu sparen, die auf Netzwerk-Operationen zu warten, bis neue Nachrichten. Wennprefetch size
verwendet, erhält der Kunde eine oder mehr Nachrichten, hat insgesamt eine Größe gleich oder kleiner, um die voreingestellte pretch Größe (und/oder zu zählen, das ist weniger).Beide
prefetch count
undprefetch size
Regeln ist, dass Sie festgelegt sind, angewendet. Wenn einer von Ihnen wird auf null gesetzt (gelöscht) wird es nicht angewendet werden.Das wichtigste, prefetching definiert das Verhalten zum senden von Nachrichten im Vorfeld weitere Nachricht, die client hat unacked.
In Verbindung mit diesen beiden Einstellungen erzeugen so etwas wie dieses:
Prefetch-mit Nachrichten-count limit und senden von Nachrichten im Voraus:
Bedingungen:
prefetch-size=5kb, prefetch-count=4
off
Workflow:
prefetch-count=4
) an den client. 4 Nachrichten werden markiert als un-acked und zog sich aus der Warteschlange aus (so dass Sie nicht ausgeliefert werden, die anderen clients).Prefetch mit großen Nachrichten:
Bedingungen:
prefetch-size=5kb, prefetch-count=2
off
Workflow:
prefetch-size=5kb
) auf client und markierte Nachricht als un-gefragt.prefetch-count=2
beachten Sie, dass nur die erste Nachricht war 5 Kb, der rest sind 1kb) und diese markierten Nachrichten als un-acked.Mit auto-ack:
Bedingungen:
prefetch-size=5kb, prefetch-count=10
on
Workflow:
prefetch-size
undprefetch-count
ignoriert, wennno-ack
auf true gesetzt (das ist wie auto-ack Funktion namens in RabbitMQ und in der AMQP-docs), werden Nachrichten gesendet, um Kunden one-by-one und entfernt Sie aus der Warteschlange nach dem erfolgreichen senden.Beachten Sie, dass mit asynchronen AMQP-Architektur, so dass unter bestimmten Bedingungen zwei clients wird MÖGLICHERWEISE eine einzige Nachricht zur gleichen Zeit. Auch un-acked Nachricht übermittelt werden KANN, um den gleichen client zurück (vor allem, wenn Sie single-client).
Betrachten Sie auch
prefetch-size
undprefetch-count
offizielle Dokumentation und Experimentieren Sie ein wenig mit diesen Optionen.P. S.:
autoack
ist im Grundeno-ack
AMQP-flag auftrue
.