Verbrauchen Sie mehrere Warteschlangen in python / pika
Ich versuche zu erstellen, die Verbraucher würden abonnieren Sie mehrere Warteschlangen, und dann die Verarbeitung von Nachrichten, wie Sie ankommen.
Das problem ist, dass, wenn es einige Daten, die bereits in der ersten Warteschlange verbraucht er die erste Warteschlange und geht nie zu konsumieren, die zweite Warteschlange.
Wenn jedoch der erste Warteschlange leer ist, wird es nicht gehen, um die nächste Warteschlange, und dann verbraucht beide Warteschlangen gleichzeitig.
Hatte ich erstmals umgesetzt einfädeln wollen aber Sie meiden es, wenn pika-Bibliothek macht es für mich ohne viel Komplexität. Unten ist mein code:
import pika
mq_connection = pika.BlockingConnection(pika.ConnectionParameters('x.x.x.x'))
mq_channel = mq_connection.channel()
mq_channel.basic_qos(prefetch_count=1)
def callback(ch, method, properties, body):
print body
mq_channel.basic_ack(delivery_tag=method.delivery_tag)
mq_channel.basic_consume(callback, queue='queue1', consumer_tag="ctag1.0")
mq_channel.basic_consume(callback, queue='queue2', consumer_tag="ctag2.0")
mq_channel.start_consuming()
- Ich habe versucht deinen code mit der einzigen änderung, das hinzufügen einen logger um die Ausnahmen zu vermeiden, und erklärt die Warteschlangen. Der code funktioniert wie erwartet. Ich veröffentlicht einige Nachrichten in jeder Warteschlange und die Nachrichten bekam, weitergeleitet und wiederholt über die CLI
- Hey, können Sie versuchen, mit pre-besiedelten Warteschlangen, und starten Sie dann den Verbraucher. Lassen Sie mich wissen, wenn dies auch wie erwartet funktioniert.
- Ich habe gerade ausprobiert und es funktioniert nicht. Ich sehe nur die Nachrichten aus der ersten Warteschlange.
- Das ist, was ich bin reden über. Komisch, nicht wahr? Haben Sie irgendwelche Ideen?
- Ich weiß nicht viel über den python-client, das ist, warum ich, fragte Gavin Balg zu beantworten
- Hat es die gleiche Funktion mit anderen clients? Kann Sie geben, es zu versuchen, in einen anderen client? Wenn dies pika konkret, Sie müssen erhöht werden. Obwohl Gavin gab einen guten Vorschlag, es wurde bereits umgesetzt.
- Ich habe gerade versucht mit der
php-amqplib
client und es funktioniert wie erwartet. Ich pre-veröffentlichen von Nachrichten an beide queues und dann sind Sie alle verbraucht. - Gut zu wissen. Ich war über die Frage aufwerfen, Wann fand ich heraus, Gavin, ist Autor von pika. Nun, es scheint, es ist nach Gavin, mir zu helfen.
- Möglich, Duplikat der Python und RabbitMQ - Beste Weg, um hören zu konsumieren Ereignisse, die von mehreren Kanälen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine mögliche Lösung ist die Verwendung von non-blocking-Verbindung und konsumieren von Nachrichten.
Dieser wird eine Verbindung zu mehreren Warteschlangen und konsumieren Nachrichten entsprechend.
/
, die Flucht nach%2f
.Das Problem ist wahrscheinlich, dass der erste Aufruf hat eine Basic.Verbrauchen und hat bereits empfangene Nachrichten aus einer pre-besiedelten Warteschlange vor dem zweiten Aufruf ausgegeben wird. Vielleicht möchten Sie versuchen, die Einstellung der QoS-prefetch-Anzahl auf 1, das die Begrenzung RabbitMQ senden Sie mehr als eine Nachricht gleichzeitig.