raise exception aiormq.exceptions.ConnectionNotAllowed: NOT_ALLOWED -
number of channels opened (2047) has reached the negotiated
channel_max (2047)
这个错误表明你遇到了 RabbitMQ 的 channel_max 限制。RabbitMQ 服务器与客户端在建立连接时会“协商”一个最大通道数(channel_max),默认通常是 2047。当你的应用创建的通道数量达到这个上限时,就会抛出 NOT_ALLOWED - number of channels opened (2047) has reached the negotiated channel_max (2047) 错误。
问题分析:
这个问题是另一个层面的问题:通道(Channel)的生命周期管理不当。
存在一个关键误解:
通道(Channel)不应该被复用或“池化”。
每次使用完通道后,它应该被 关闭,而不是放回连接池。如果你反复从同一个连接创建新通道但不关闭它们,通道计数就会不断累积,最终达到 channel_max 限制。
✅ 正确的做法
- 每个操作使用一个新通道。
- 操作结束后,通道必须被关闭。
- 连接可以复用,但通道不能。
🔧 修复方案:修改 get_channel() 上下文管理器
你需要确保每次 get_channel() 使用完毕后,通道被关闭,而连接被放回池中。
@asynccontextmanager
async def get_channel(self) -> AsyncGenerator[AbstractRobustChannel, None]:
"""

最低0.47元/天 解锁文章
988

被折叠的 条评论
为什么被折叠?



