Django中用Redis+Celery报错[WinError10061],求排查方向
问题排查:Django+Celery+Redis连接报错WinError 10061
问题描述
在Django项目中使用Redis配合Celery给新注册用户发送消息时,出现报错:
OperationalError [WinError 10061] No connection could be made because the target machine actively refused it
已完成以下排查但问题未解决:
- 更换VS Code解释器为项目
.venv环境,Celery方法语法高亮恢复,但报错依旧 - 已启动Docker、Django服务器、Celery服务
- Redis通过Docker部署,端口映射
0.0.0.0:6379->6379/tcp,容器处于运行状态 settings.py中REDIS_HOST设为127.0.0.1- 执行
Test-NetConnection -ComputerName 127.0.0.1 -Port 6379,结果显示TcpTestSucceeded : True
项目配置
settings.py 相关配置
EMAIL_HOST = "smtp.gmail.com" EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = "<email>" EMAIL_HOST_PASSWORD = "<password>" REDIS_HOST = "127.0.0.1" REDIS_PORT = "6379" BROKER_URL = "redis://" + REDIS_HOST + ":" + REDIS_PORT + "/0" BROKER_TRANSPORT_OPTIONS = {"visibility_timeout": 3600} CELERY_RESULT_BACKEND = "redis://" + REDIS_HOST + ":" + REDIS_PORT + "/0"
celery.py 配置
import os from celery import Celery os.environ.setdefault("DJANGO_SETTINGS_MODULE", "shop.settings") app = Celery("shop", broker_connection_retry=False, broker_connection_retry_on_startup=True) app.config_from_object("django.conf:settings") app.autodiscover_tasks()
其他可能的排查方向
- Celery版本兼容性问题:检查当前项目Celery版本与旧项目是否一致,不同版本的配置参数可能存在隐性差异。新版本推荐使用小写配置项,可尝试修改配置:
broker_url = "redis://127.0.0.1:6379/0" result_backend = "redis://127.0.0.1:6379/0" - Redis绑定地址配置:进入Redis容器执行
redis-cli CONFIG GET bind,确认返回值为0.0.0.0。若仅绑定容器内部127.0.0.1,即使做了端口映射,外部也无法正常访问,需修改Redis启动命令添加--bind 0.0.0.0或调整配置文件。 - Celery启动环境校验:确保在项目
.venv虚拟环境中执行Celery启动命令,且指定了正确的项目模块:celery -A shop worker --loglevel=info - Redis密码验证遗漏:如果Redis设置了访问密码,需在Broker URL中添加密码信息,格式为
redis://:password@127.0.0.1:6379/0。 - Windows安全软件拦截:临时关闭Windows防火墙或第三方杀毒软件,排查是否存在连接拦截情况。
- Celery配置加载完整性:确认
celery.py放在项目根目录(与manage.py同级),并在项目目录的__init__.py中添加以下代码确保配置被正确加载:from .celery import app as celery_app __all__ = ('celery_app',) - Redis数据库冲突:尝试更换Redis数据库编号(比如将URL中的
/0改为/1),排查是否有其他进程占用目标数据库。
内容的提问来源于stack exchange,提问作者Coder4Fun250
相关产品推荐
相关产品推荐

