[英]Pika worker throws exception when running 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参数。
您确定要连接到发布者和消费者方面的同一服务器(主机)吗?
connection = pika.BlockingConnection(pika.ConnectionParameters(host=cmdargs.server))
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
如果你的队列是持久的,只需删除声明“channel.queue_declare(queue ='task_queue')”,这在你的情况下就足够了。
当我尝试使用durable = True使队列msg持久化时,我遇到了同样的问题。
尝试重命名队列名称,它适用于我的脚本。 也许杀掉队列new_task ,重新运行你的脚本也行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.