asyncio无法连接到RabbitMQ

我正在学习大量的量化框架,但是在连接RabbitMQ时总是出现连接错误。经过一些故障排除后,我发现asynico / aioamqp模块总是提示错误:在建立网络连接之前,已对开放流进行了垃圾回收;显式调用“ stream.close()”。  尝试连接RabbitMQ服务器时,RabbitMQ已启动并正在运行,其他客户端可以正确连接到它。

然后,我按照aioamqp(https://github.com/Polyconseil/aioamqp/blob/master/examples/send.py)中的hello world示例编写一个测试程序,然后重现该错误。

import asyncio
import aioamqp


async def send():
    transport,protocol = await aioamqp.connect(host="127.0.0.1",port=5672,login="guest",password="guest",login_method="PLAIN")
    channel = await protocol.channel()

    await channel.queue_declare(queue_name='hello')

    await channel.basic_publish(
        payload='Hello World!',exchange_name='',routing_key='hello'
    )

    print(" [x] Sent 'Hello World!'")
    await protocol.close()
    transport.close()



asyncio.get_event_loop().run_until_complete(send())
(venv_380) appledeMBP:Market apple$ python hello.py

An open stream was garbage collected prior to establishing network connection; call "stream.close()" explicitly.

Traceback (most recent call last):
  File "hello.py",line 31,in <module>
    asyncio.get_event_loop().run_until_complete(send())
  File "/Users/apple/.pyenv/versions/3.8.0/lib/python3.8/asyncio/base_events.py",line 608,in run_until_complete
    return future.result()
  File "hello.py",line 14,in send
    transport,login_method="PLAIN")
  File "/Users/apple/.virtualenvs/venv_380/lib/python3.8/site-packages/aioamqp/__init__.py",line 59,in connect
    sock.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY,1)
  File "/Users/apple/.pyenv/versions/3.8.0/lib/python3.8/asyncio/trsock.py",line 82,in setsockopt
    self._sock.setsockopt(*args,**kwargs)

OSError: [Errno 9] Bad file descriptor
leinzen 回答:asyncio无法连接到RabbitMQ

最后我发现这是由Python版本引起的。使用3.6而不是3.8时该问题消失了,这导致aioamqp.connect()的连接出现问题

本文链接:https://www.f2er.com/3140818.html

大家都在问