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

Django+Celery配置RabbitMQ却连接Redis的问题求助

解决思路

1. 排查环境变量覆盖问题

你的docker-compose.yml中web和celery服务都加载了./env.dev文件,环境变量优先级高于settings.py中的配置。打开env.dev文件,检查是否存在如下变量:

  • CELERY_BROKER_URL
  • BROKER_URL
  • CELERY_RESULT_BACKEND

如果这些变量被设置为Redis地址(比如redis://localhost:6380//),直接删除或修改为RabbitMQ的配置:

CELERY_BROKER_URL=amqp://rabbitmq
CELERY_RESULT_BACKEND=amqp://rabbitmq

2. 统一Celery配置前缀

你的celery.py使用了namespace='CELERY'加载配置,这意味着只有以CELERY_开头的变量会被Celery识别。建议在settings.py中统一使用带前缀的配置,删除冗余的无前缀变量:

# 保留带CELERY_前缀的配置
CELERY_BROKER_URL = 'amqp://rabbitmq'
CELERY_BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'amqp://rabbitmq'

# 删除不带前缀的BROKER_URL,避免混淆

3. 验证容器网络连通性

Docker Compose会自动为所有服务创建默认网络,rabbitmq服务名可直接作为主机名访问:

  • 执行docker-compose ps查看rabbitmq容器状态,确保处于Up状态
  • 进入web容器后执行ping rabbitmq,确认能正常解析和连通RabbitMQ服务

4. 确认依赖完整性

确保项目的requirements.txt中包含Celery连接RabbitMQ所需的py-amqp库,若缺失则添加后重新构建镜像:

py-amqp>=5.0.0
celery>=5.2.6

执行docker-compose build重新构建web和celery镜像,确保依赖生效。

5. 规范Celery启动方式

建议直接通过Docker Compose启动Celery服务,避免进入web容器启动导致的配置不一致:

docker-compose up celery

若需进入容器调试,使用exec而非run --rm(后者会重新创建容器,可能加载错误配置):

docker-compose exec celery bash

再执行celery -A wine_shop worker --loglevel=info启动worker。


内容的提问来源于stack exchange,提问作者Victor Torres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:54:26