Rabbitmq abrufen mehrerer Nachrichten über eine einzige synchronen Aufruf
Ist es ein Weg, um erhalten mehrere Nachrichten mit einem einzigen synchronen Aufruf ?
Wenn ich weiß, dass es N Nachrichten( N könnte einen kleinen Wert, kleiner als 10) in der Warteschlange, dann sollte ich in der Lage, etwas zu tun-Kanal.basic_get(String queue, boolean autoAck , int numberofMsg ). Ich möchte nicht, dass mehrere Anfragen an den server .
InformationsquelleAutor Vikram | 2013-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
RabbitMQ ist
basic.get
unterstützt nicht mehrere Nachrichten leider wie in den docs. Die bevorzugte Methode zum abrufen mehrerer Nachrichten ist die Verwendung basic.verbrauchen die push-Nachrichten an den client zu vermeiden mehrere round-trips.acks
asynchron sind, damit Ihre Kunden werden nicht warten, für den server zu reagieren.basic.consume
hat auch den Vorteil, dass RabbitMQ, um wieder die Nachricht, wenn der client die Verbindung trennt, etwas, dasbasic.get
nicht. Dieser kann deaktiviert werden, sowie die Einstellungno-ack
zutrue
.Einstellung
basic.qos
prefetch-count
wird die Anzahl der Meldungen zu schieben, um den Kunden zu jeder Zeit. Wenn es nicht eine Nachricht warten, die auf der client-Seite (die würden sofort zurückkehren) - client-Bibliotheken neigen dazu, zu blockieren, mit einem optionalen timeout.Kann es eventuell änderungen oder RabbitMQ AMQP, die es ermöglichen, einen synchronen Aufruf, um mehrere Nachrichten in den dazwischen liegenden Jahren. Anschlüsse für RabbitMQ sind von client -> Kaninchen. Die Veröffentlichung von Nachrichten geschieht über diese bestehende Verbindung. Die Verwendung von
basic.get
oderbasic.consume
nicht ändern, wie die Verbindung hergestellt wird.Dies ist um das konsumieren von Nachrichten nicht zu veröffentlichen. Bedeutet, dass bedeutet, dass eine Verbindung hergestellt wird, die durch den Verbraucher und dann geöffnet bleibt, um für RabbitMQ callbacks arbeiten? Dies ist möglicherweise nicht die Möglichkeit, in einigen Szenarien sowie mit der Einschränkung der firewall-Regeln.. In diesem Sinne der Nutzung Alter von basic.bekommen oder basic.verbrauchen ja ändern, wie die Verbindung behandelt wird.
Der client macht die Verbindung, ob Konsum oder die Veröffentlichung, unabhängig von den Befehlen verwendet werden, die über die Verbindung. Die Rückrufe werden von client-Bibliotheken als Folge von AMQP-Nachrichten über diese Verbindung.
InformationsquelleAutor Philip Cristiano
Können Sie eine
QueueingConsumer
Umsetzung vonConsumer
Schnittstelle, die es ermöglicht das abrufen mehrerer Nachrichten in einer einzigen Anfrage.Gibt es einen besseren Weg, um das problem zu lösen?
InformationsquelleAutor Alexander Kuznetsov
Erst erklären Instanz QueueingBasicConsumer() wich umschließt das Modell.
Aus dem Modell ausführen-Modell.BasicConsume(QueueName, false, consumer)
Implementieren Sie eine Schleife, wird die Schleife um Nachrichten aus der Warteschlange, die dann die Verarbeitung
Nächste Zeile - Verbraucher.Warteschlange.Dequeue () - Methode - warten auf die Nachricht aus der Warteschlange empfangen.
Dann umwandeln byte-array in einen string und zeigt ihn an.
Modell.BasicAck() - Freigabe-Nachricht aus der Warteschlange zu empfangen, die nächste Nachricht
Und dann auf der server-Seite können starten, warten auf die nächste Nachricht, um durch zu kommen:
InformationsquelleAutor Andrei Karcheuski
Nicht eine elegante Lösung und nicht lösen, machen Sie mehrere Anrufe, aber Sie können die MessageCount Methode. Zum Beispiel:
InformationsquelleAutor Fonsini