Pika工作程序在运行channel.declare_queue时抛出异常



我正在编写一个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参数。

如果您的队列是持久的,只需删除声明"channel.queue_declare(queue='task_queue')",在您的情况下就足够了。

您确定要连接到发布者和使用者端的同一服务器(主机)吗?

connection = pika.BlockingConnection(pika.ConnectionParameters(host=cmdargs.server))
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))

当我尝试使用耐久=True使队列消息持久化时,我遇到了同样的问题。

尝试重命名队列名称,它与我的脚本配合得很好。也许可以终止队列new_task,然后重新运行脚本也可以。

最新更新