Python 皮卡:如何在制作人和经纪人之间建立理想的联系? 问题的根源

Python 皮卡:如何在制作人和经纪人之间建立理想的联系? 问题的根源,python,rabbitmq,keep-alive,pika,Python,Rabbitmq,Keep Alive,Pika,我的twisted必须不时向rabbitmq发布消息。但在测试过程中,出现了以下问题: 连接关闭:管道断裂 连接关闭:超时 ConnectionClosed:(-1,“ConnectionResetError(54,'对等方重置连接”)” ChannelClosed 要求 此连接需要满足以下要求: 不会断开连接 断开连接后可以自动重新连接 呼叫码 消息队列类 我将通道设置为类属性,因为稍后创建的mq实例不必重新创建连接 class MessageQueue(): channel = None

我的twisted必须不时向rabbitmq发布消息。但在测试过程中,出现了以下问题:

  • 连接关闭:管道断裂

  • 连接关闭:超时

  • ConnectionClosed:(-1,“ConnectionResetError(54,'对等方重置连接”)”

  • ChannelClosed

  • 要求 此连接需要满足以下要求:

  • 不会断开连接

  • 断开连接后可以自动重新连接

  • 呼叫码 消息队列类 我将通道设置为类属性,因为稍后创建的mq实例不必重新创建连接

    class MessageQueue():
    channel = None
    
    def __init__(self):
        if not MessageQueue.channel:
            credentials = pika.PlainCredentials("name", "password")
            conn_params = pika.ConnectionParameters(ip,
                                                    credentials = credentials,
                                                    heartbeat=10)
            conn_broker = pika.BlockingConnection(conn_params)
    
            MessageQueue.channel = conn_broker.channel()
    
        self.exchange_declared = False
        self.exchange_name = ""
    
    def declare_direct_exchange(self, exchange_name):
        self.exchange_name = exchange_name
        self.channel.exchange_declare(exchange=exchange_name,
                                      exchange_type="direct",
                                      passive=False,
                                      durable=True,
                                      auto_delete=False)
        self.exchange_declared = True
    
    def publish_message(self, message=""):
        if not self.exchange_declared:
            raise ExchangeNotDeclaredException("Exchange must be declared "
                                               "before publish messages.")
        msg_props = pika.BasicProperties()
        msg_props.content_type = "text/plain"
    
        self.channel.basic_publish(body=message,
                                   exchange=self.exchange_name,
                                   properties=msg_props,
                                   routing_key="hola")
    
    class MessageQueue():
    channel = None
    
    def __init__(self):
        if not MessageQueue.channel:
            credentials = pika.PlainCredentials("name", "password")
            conn_params = pika.ConnectionParameters(ip,
                                                    credentials = credentials,
                                                    heartbeat=10)
            conn_broker = pika.BlockingConnection(conn_params)
    
            MessageQueue.channel = conn_broker.channel()
    
        self.exchange_declared = False
        self.exchange_name = ""
    
    def declare_direct_exchange(self, exchange_name):
        self.exchange_name = exchange_name
        self.channel.exchange_declare(exchange=exchange_name,
                                      exchange_type="direct",
                                      passive=False,
                                      durable=True,
                                      auto_delete=False)
        self.exchange_declared = True
    
    def publish_message(self, message=""):
        if not self.exchange_declared:
            raise ExchangeNotDeclaredException("Exchange must be declared "
                                               "before publish messages.")
        msg_props = pika.BasicProperties()
        msg_props.content_type = "text/plain"
    
        self.channel.basic_publish(body=message,
                                   exchange=self.exchange_name,
                                   properties=msg_props,
                                   routing_key="hola")