操作错误 [WinError 10061] 无法建立连接,因为目标主机主动拒绝了连接
我正在尝试在Django中通过Redis向新注册的用户发送消息。
我曾经有一个实现类似功能的项目,运行是正常的。
在我当前的项目中,我遇到了这个错误 "OperationalError [WinError 10061] No connection could be made because the target machine actively refused it."
我注意到在那个类似的项目中,VS Code显示Celery实例的方法(config_from_object和 autodiscover_tasks)的文本是彩色的,而在新项目里它们不是彩色的,只有简单文本。我以为这可能是问题所在,检查了解释器,发现它并非在.venv文件夹里的那个版本,于是把它改成了.venv里的解释器。
app.config_from_object("django.conf:settings")
app.autodiscover_tasks()
这些方法的文本变得彩色了,但这并没有解决任何问题。
我有Docker、Django服务器和Celery正在运行。
我在使用包含Redis的 Docker,在创建容器时对端口进行了转发。
容器正在运行。
settings.py中的主机被设为127.0.0.1
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()
我还执行了这些命令:
Test-NetConnection -ComputerName 127.0.0.1 -Port 6379
docker ps --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}"
1.
ComputerName : 127.0.0.1
RemoteAddress : 127.0.0.1
RemotePort : 6379
InterfaceAlias : Loopback Pseudo-Interface 1
SourceAddress : 127.0.0.1
TcpTestSucceeded : True
2.
docker ps --format "table {{.Names}} \t{{.Ports}} \t{{.Status}}"
NAMES PORTS STATUS
my-redis 0.0.0.0:6379->6379/tcp Up 5 hours
没有任何帮助。还有可能是什么问题?
提前感谢大家的解答
解决方案
我觉得你应该使用 CELERY_BROKER_URL 而不是 BROKER_URL,就像 CELERY_RESULT_BACKEND 以 CELERY_ 为前缀一样。你的Docker容器听起来没问题,我认为你的应用其实并没有真正连接到它。