Celery 无法连接到 RabbitMQ 服务器

Posted

技术标签:

【中文标题】Celery 无法连接到 RabbitMQ 服务器【英文标题】:Celery cannot connect to RabbitMQ server 【发布时间】:2021-11-20 12:14:10 【问题描述】:

我正在尝试运行 celery,即使我正确设置了用户、虚拟主机并分配了适当的标签,它也无法连接到 RabbitMQ 服务器

celery -A proj worker -l info

以上命令返回错误

[2021-09-28 18:05:37,649: ERROR/MainProcess] consumer: Cannot connect to amqp://test:**@12:5672//: timed out.
Trying again in 2.00 seconds... (1/100)

我已经按如下方式初始化了 celery 应用程序

app = Celery('proj',
             broker=f'amqp://test:test@12#4@localhost/test_vhost')

我认为这不起作用,因为密码 test@12#4 中包含特殊字符 @#

如何在不更改密码的情况下使其工作。


【问题讨论】:

也许能逃脱@ 试试app = Celery('proj', broker=fr'amqp://test:test@12#4@localhost/test_vhost')app = Celery('proj', broker=r'amqp://test:test@12#4@localhost/test_vhost') @Superbman 您的建议无效 @C.Nivs 你能提供@ 的转义吗,我找不到。我为#找到的,它是%23 当我用%23 替换# 时它起作用了,我猜是# 导致字符串终止并导致问题,而不是@。 @C.Nivs,已经用你的建议解决了,所以如果你写了一个答案,我会把它标记为这个问题的正确答案 【参考方案1】:

这个问题可以使用转义序列来解决。

问题不在于@ 字符,而在于#

所以如果您的密码是test@12#4,您可以简单地使用# 字符的转义序列,即%23

密码可以写成test@12%234

【讨论】:

【参考方案2】:

抱歉,无法使用带有“@”字符的此类密码,这已经是 Celery 的一个已知问题,原因是由于 urllib3 解析功能。唯一的办法是从密码中删除这些字符。

参考请查看对应的github issuehere

【讨论】:

当我对# (%23) 字符使用转义序列时,我设法让它工作。原来@ 不是问题所在。我输入密码为test@12%234 太棒了..看起来解析中一定发生了一些更新,因为在堆栈溢出的旧问题之一中,建议使用转义序列,但它不起作用..也许你应该添加一个答案对于未来的用户...

以上是关于Celery 无法连接到 RabbitMQ 服务器的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ (beam.smp) 和高 CPU/内存负载问题

Celery sqs 尝试连接到 amqp:无法连接到 amqp://guest:**@127.0.0.1:5672//

celery + redis 无法连接到 amqp://guest:**@127.0.0.1:5672//: [Errno 111] 连接被拒绝

Flask + Celery + Redis:消费者:无法连接到 amqp://guest:**@127.0.0.1:5672//:超时

Windows 10 上的 RabbitMQ - 无法连接到 epmd:地址(无法连接到主机/端口)

创建第一个 Celery 任务 - Django。错误 - “错误/MainProcess] 消费者:无法连接到 amqp://guest:**@127.0.0.1:5672//:”