Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pika上下文管理器_Python_Python 3.x_Rabbitmq_Pika - Fatal编程技术网

Python pika上下文管理器

Python pika上下文管理器,python,python-3.x,rabbitmq,pika,Python,Python 3.x,Rabbitmq,Pika,我正在尝试编写一个上下文管理器,使用pika连接到rabbit。这就是它的样子 import pika class RabbitConnection: def __init__(self, host, user, password, queue_name, port=5627): self.host = host self.user = user self.password = password self.port

我正在尝试编写一个上下文管理器,使用
pika
连接到rabbit。这就是它的样子

import pika
 
 
class RabbitConnection:
    def __init__(self, host, user, password, queue_name, port=5627):
        self.host = host
        self.user = user
        self.password = password
        self.port = port
        self.queue_name = queue_name
 
    def __enter__(self):
        credentials = pika.PlainCredentials(self.user, self.password)
        parameters = pika.ConnectionParameters(
            host=self.host,
            port=self.port,
            credentials=credentials
        )
        self.connection = pika.BlockingConnection(parameters)
        self.channel = self.connection.channel()
        self.channel.queue_declare(queue=self.queue_name)
        return self.channel
 
    def __exit__(self):
        self.connection.close()
但它不起作用。下面是向兔子发送消息的简单django视图

def send_message(request):
    message = request.GET['message']
    queue_name = 'hello'
    with RabbitConnection(settings.RABBIT_HOST, settings.RABBIT_USER, settings.RABBIT_PASSWORD, queue_name) as rc:
        rc.basic_publish(
            exchange='',
            routing_key=queue_name,
            body=message,
        )
    return HttpResponse()
但是我在
self.connection=pika.BlockingConnection(参数)

有趣的是,当我在没有上下文管理器的情况下使用相同的代码时,它可以工作(没有错误)


问题出在哪里?

查看您正在使用的默认端口:

def __init__(self, host, user, password, queue_name, port=5627):

rabbitmq端口通常为5672…

非常好,谢谢
def __init__(self, host, user, password, queue_name, port=5627):