私は、RabbitMQブローカーからのジョブメッセージを受け入れてジョブを処理し、結果を別のサーバーに返すPythonクライアントを作成しています。RabbitMQブローカーにメッセージを送信するスクリプトは正常に起動しますが、channel.declare_queue(queue ='task_queue')を実行すると、ワーカーが次のエラーをスローします。
pika.exceptions.AMQPChannelError:(406、"PRECONDITION_FAILED-vhost'/'のキュー'task_queue'のパラメーターは同等ではありません")
クライアント:
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()
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()
どんな助けや洞察も大歓迎です。
編集:上記のコードでエラーが発生した理由を発見しました。メッセージを公開するときにdelivery_mode=2を指定していましたが、キューを宣言したときに、Durable=Trueパラメーターを追加するのを忘れました。