已安装kombu却无法导入Connection,如何向RabbitMQ发送AMQP1.0消息
错误原因
- 你遇到的
ImportError: cannot import name 'Connection' from 'kombu'通常由三类原因导致:- 本地项目目录下存在名为
kombu.py的文件/文件夹,和官方库重名,Python优先导入了本地文件 - 安装的kombu版本过旧,或者安装过程中文件损坏
- 你需要使用AMQP 1.0协议,但缺少kombu对应依赖,导致相关组件加载失败
- 本地项目目录下存在名为
修复步骤
- 第一步:排查本地重名文件
检查你的代码运行目录下有没有名为kombu.py的文件,或者__pycache__目录下有没有kombu相关的缓存文件,如有请删除或者重命名。 - 第二步:重装升级依赖
依次执行以下命令升级kombu,同时安装AMQP 1.0协议所需的依赖包:pip install --upgrade kombu pip install python-qpid-proton - 第三步:开启RabbitMQ的AMQP 1.0支持
在RabbitMQ服务端执行命令开启对应插件,否则服务端无法识别AMQP 1.0协议的请求:rabbitmq-plugins enable rabbitmq_amqp1_0 - 第四步:修正你的代码
你原有代码存在变量名笔误(定义的是tasks_queue,后续调用用了control_queue),修正后的可用代码如下:from kombu import Connection # 替换为你实际的AMQP连接地址,格式为 amqp://用户名:密码@主机地址:端口/虚拟主机 with Connection('amqp://your_amqp_url') as conn: control_queue = conn.SimpleQueue('queuename') message = {"key": "value"} # 替换为你实际的JSON格式消息 control_queue.put(message) control_queue.close()
额外说明
如果还是遇到连接报错,可确认你的AMQP连接地址格式是否正确,RabbitMQ对应端口是否开放,账号是否有队列的读写权限。
内容的提问来源于stack exchange,提问作者Bharath Pabba
相关产品推荐
相关产品推荐

