Pika Arbeiter wirft exception beim ausführen Kanal.declare_queue
Ich Schreibe ein python-client für die Aufnahme einer Arbeit, die Nachrichten aus einer RabbitMQ-broker und verarbeiten die Aufträge, für die Rückgabe der Ergebnisse auf einen anderen server. Mein script sendet Nachrichten an den RabbitMQ-broker startet gut, aber meine Arbeiter wirft die folgende Fehlermeldung beim ausführen Kanal.declare_queue(queue='task_queue')
pika.Ausnahmen.AMQPChannelError: (406, "PRECONDITION_FAILED - Parameter für das queue 'task_queue' in vhost '/' nicht-äquivalent")
Client:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host=cmdargs.server))
channel = connection.channel()
channel.queue_declare(queue='task_queue')
channel.basic_qos(prefetch_count=1)
channel.basic_consume(ProcJobCallback, queue='task_queue')
channel.start_consuming()
Server-Methode für die Interaktion mit RabbitMQ:
def addNewJob(self, newJob):
self.jobList.append(newJob)
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='task_queue')
for tile in newJob.TileStatus:
message = "{0},{1},{2}".format(newJob, tile[0], tile[1])
channel.basic_publish(exchange='', routing_key='task_queue', body=message, properties=pika.BasicProperties(delivery_mode = 2, ))
connection.close()
Jede Hilfe oder Einsicht wird sehr geschätzt.
EDIT: ich habe herausgefunden, warum ich immer eine Fehlermeldung mit dem oben aufgeführten code. Ich war die Angabe delivery_mode=2 bei der Veröffentlichung meiner Nachrichten, aber wenn ich erklärte der Warteschlange, ich vergaß hinzuzufügen, die Robust=True parameter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie sicher, dass Sie eine Verbindung zum gleichen server (host) auf den publisher und consumer-Seite?
wenn Ihre Warteschlange wird dauerhaft entfernen Sie einfach die Deklaration " - Kanal.queue_declare(queue='task_queue')", das sollte genug sein in deinem Fall.
ich das gleiche problem wenn ich versuche die queue msg persistent mit langlebigen=True.
Versuchen, benennen Sie den Namen der Warteschlange, es funktioniert gut mit meinem Skript. Vielleicht töten die Warteschlange new_task, und re-führen Sie Ihr Skript funktioniert auch.