小编Dan*_*phy的帖子

Pika worker在运行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()
Run Code Online (Sandbox Code Playgroud)

与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()
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助或见解.

编辑:我发现为什么我上面列出的代码出错.我在发布消息时指定delivery_mode = 2,但是当我声明队列时,我忘了添加Durable = True参数.

python amqp rabbitmq pika

6
推荐指数
1
解决办法
5516
查看次数

Python LoggerAdapter正在向STDOUT提供重复的日志条目

我正在尝试将上下文信息添加到我的python脚本的日志输出中.本质上,我使用SocketServer类来处理传入的网络连接,当客户端向服务器发送消息时,我想向STDOUT创建一个日志条目,以及一个文件,其中包含客户端的时间,日志级别,IP和收到消息.

我尝试使用过滤器实现这个(我无法工作,但我愿意接受建议)和LoggerAdapter:http://pastebin.com/peT0rjA7

class ConnInfo:
    def __getitem__(self, name):
        if name == "ip":
            result = tlocal.ip
        if name == "cmd":
            result = tlocal.msg
        return result
    def __iter__(self):
        keys = ['ip', 'cmd']
        keys.extend(self.__dict__.keys())
        return keys.__iter__()

logging.basicConfig(level=logging.DEBUG,
                    format="%(asctime)s %(name)-12s %(levelname)-8s %(message)s",
                    datefmt="%d-%m %H:%M:%S",
                    filename="distpovadmin.log",
                    filemode="w")
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
nodeCommsConFormatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(ip)-4s %(cmd)-8s %(message)s')
console.setFormatter(formatter)

#nodeCommsConLogging = logging.LoggerAdapter(logging.getLogger('NodeCommsConnection').addHandler(console.setFormatter(nodeCommsConFormatter())), ConnInfo())
CommsConConsole = logging.StreamHandler()
CommsConConsole.setLevel(logging.INFO)
CommsConConsole.setFormatter(nodeCommsConFormatter)
nodeCommsConLogging = logging.LoggerAdapter(logging.getLogger('NodeCommsConnection'), ConnInfo())
logging.getLogger('NodeCommsConnection').removeHandler(console)
logging.getLogger('NodeCommsConnection').addHandler(CommsConConsole)

logging.getLogger('').addHandler(console)
Run Code Online (Sandbox Code Playgroud)

当我像这样调用nodeCommsConLogging时:

nodeCommsConLogging.info("Message Received")
Run Code Online (Sandbox Code Playgroud)

我在STDOUT日志中得到重复的条目 …

python logging

2
推荐指数
1
解决办法
2583
查看次数

标签 统计

python ×2

amqp ×1

logging ×1

pika ×1

rabbitmq ×1