簡體   English   中英

Pika worker在運行channel.declare_queue時拋出異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM