鼠兔 SelectConnection 适配器 'Unresolved attribute reference'

Pika SelectConnection adapter 'Unresolved attribute reference'

我在使用 pika.SelectConnection 适配器连接到 RabbitMQ 时遇到问题。我正在使用 Pika 1.1.0 和 Python 3.7.9,开发使用 PyCharm 社区。 下面是我的代码快照,显示了我如何创建连接。

import pika

def on_done():
    connect.channel()
    print("Open Callback")

if __name__ == '__main__':
    account = "user"
    password = "password"
    server = "172.17.0.5"
    credentials = pika.PlainCredentials(account, password)
    parameters = pika.ConnectionParameters(host=server, port=15672, credentials=credentials,                      socket_timeout=10)
    connect = pika.SelectConnection(parameters, on_open_callback=on_done)
   
    connect.ioloop.start()

RabbitMQ 运行ning,我已经使用 pika.BlockingConnection 适配器检查了连接和消息传递。

我的 IDE (PyCharm) 将 start() 函数作为 "Unresolved attribute reference 'start' for class 'object' “。当我用运行这段代码时,没有错误。在管理网页上,我没有看到连接已打开。

有人遇到过类似的问题吗?我的 IDE 有问题吗?

感谢您的回答。

刚刚有同样的警告,但在 AsyncPublisher-Example 中,我也想摆脱它。

问题在于 IOLoop 并未由 pika 专门定义,尽管它应该定义。

如果你使用鼠兔,你正在寻找的 IOLoop 类型是:

pika.adapters.select_connection.IOLoop

在你的情况下,最简单的方法是投射你的 IOLoop,然后使用这个开始。

io_loop = cast(pika.adapters.select_connection.IOLoop, connect.ioloop)

io_loop.start()

对于更复杂的 AsyncPublisher 我做了几乎相同的事情:

def __init__(self, amqp_url: str, queues: List[str], interval: float):

    self._ioloop: Optional[pika.adapters.select_connection.IOLoop] = None

连接建立后:

def run(self):
    """Run the example code by connecting and then starting the IOLoop.
    """
    while not self._stopping:
        self._connection = None
        self._deliveries = []
        self._ack = 0
        self._not_ack = 0
        self._message_number = 0

        try:
            self._connection = self.connect()
            self._ioloop = cast(pika.adapters.select_connection.IOLoop, self._connection.ioloop)
            self._ioloop.start()