关键:鼠兔.连接:关闭时试图发送帧



我使用Pika在Tornado和RabbitMQ中集成Websocket。它成功地在各种队列上运行了一段时间。然后引发以下错误:

关键:鼠兔。连接:关闭时试图发送帧

我已经从https://github.com/haridas/RabbitChat/blob/master/tornado_webapp/rabbit_chat.py

中获取了代码参考

我已经彻底检查了我的代码,但是不明白为什么它会引发这样的错误。有人能帮忙排除故障吗?

谢谢!

还要注意改变背压倍增器并不能解决问题。所以要寻找一个真正的解决方案

有时鼠兔连接只是因为网络故障而终止。您应该向PikaClient类添加代码,以便在连接断开时自动处理重新连接。类似这样的内容(未经测试,但应该让您了解):

def on_connection_closed(self, connection, reply_code, reply_text):
    """This method is invoked by pika when the connection to RabbitMQ is
    closed unexpectedly. Since it is unexpected, we will reconnect to
    RabbitMQ if it disconnects.
    """
    self.channel = None
    if self._closing:  # Don't reconnect if you explicitly closed the connection.
        pass
    else:
        logger.warning('Connection closed, reopening in 5 seconds: (%s) %s',
                       reply_code, reply_text)
        self.connection.add_timeout(5, self.reconnect)
def reconnect(self):
    """Will be invoked by the IOLoop timer if the connection is
    closed. See the on_connection_closed method.
    """
    # Create a new connection
    self._reconnecting = True
    self.connection = self.connect()

由于消费者和生产者正在排队-从特定队列中退出队列,因此由于共享队列上的多个异步线程系统,PIKA Client在某一点上卡住了。

因此,如果其他人遇到同样的问题,请遵循代码中的几个检查:

  1. 您有多少个连接?有多少频道?有多少人在排队?有多少生产者-消费者?(这些可以通过sudo rabbitmqctl list_queues等来确定)

  2. 一旦您了解了您正在使用的结构,跟踪正在运行的事务。对于多个用户的多个请求

  3. 因此,在每个事务上,打印线程动作,以便您了解鼠兔活动。由于这些线程以异步方式运行,如果错误地超载,将导致pika客户端崩溃。因此创建一个线程管理器来控制线程。

解决方案由Gavin Roy &Michael kishin,来自Pika &RabbitMQ。

相关内容

  • 没有找到相关文章