You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Celery与Django连接AWS RabbitMQ时出现连接拒绝问题

解决AWS RabbitMQ与Celery 5.2.7的连接问题

从CloudWatch日志里的no_suitable_ciphers和TLS告警信息来看,问题核心是TLS版本或加密套件不匹配——AWS托管RabbitMQ对TLS配置有严格要求,而本地RabbitMQ无此限制。以下是针对性解决方案:

1. 强制指定TLS 1.2及兼容加密套件

在Django的settings.py中添加传输选项,明确指定符合AWS要求的TLS版本和加密套件:

import ssl

CELERY_BROKER_URL = 'amqps://username:password@url.mq.ap-south-1.amazonaws.com:5671'
CELERY_RESULT_BACKEND = 'rpc://'

# 配置Broker的SSL参数
CELERY_BROKER_TRANSPORT_OPTIONS = {
    'ssl': {
        'ssl_version': ssl.PROTOCOL_TLSv1_2,
        'ciphers': 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'
    }
}

# 结果后端同样需要SSL配置(因为用了rpc://)
CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS = {
    'ssl': {
        'ssl_version': ssl.PROTOCOL_TLSv1_2,
        'ciphers': 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'
    }
}

如果不想导入ssl模块,也可以直接用TLS版本对应的数字:'ssl_version': 5(对应TLSv1.2)。

2. 升级amqp库

Celery依赖的amqp库旧版本可能不支持AWS要求的加密套件,执行以下命令升级:

pip install --upgrade amqp

3. 快速验证配置细节

  • 确认AWS RabbitMQ实例的安全组已开放5671端口(日志显示已完成认证,此步骤可快速排除端口问题);
  • 检查RabbitMQ实例控制台的TLS配置,确保启用了TLS 1.2及以上版本(AWS托管实例默认符合要求)。

完成配置后重启Celery worker:

celery -A proj worker --loglevel=info --without-heartbeat --without-gossip --without-mingle

内容的提问来源于stack exchange,提问作者saurabh singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:33:15