我正在编写一个 python 客户端来接受来自 RabbitMQ 代理的作业消息并处理作业,将结果返回到另一台服务器。我的向 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 参数。