django+celery+redis出现kombu报错:目标计算机积极拒绝,无法连接

349 阅读1分钟

前言

目前正在使用dvadmin开源框架开发后台系统,有很多耗时任务会导致系统崩溃,遂引入celery处理。

celery使用

以下是我的setting.py中的celery设置参数

# Celery 配置
DJANGO_CELERY_BEAT_TZ_AWARE = False
CELERY_TIMEZONE = "Asia/Shanghai"  # celery 时区问题
CELERY_BROKER_URL = 'redis://:Cszx147@localhost:6379/0'  # Redis 作为消息代理
CELERY_RESULT_BACKEND = 'redis://:Cszx147@localhost:6379/0'  # 任务结果存储
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True # 在 Celery 启动时进行重试

celery.py:

import functools
import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')

from django.conf import settings
from celery import platforms
from celery import Celery

# 租户模式
if "django_tenants" in settings.INSTALLED_APPS:
    from tenant_schemas_celery.app import CeleryApp as TenantAwareCeleryApp

    app = TenantAwareCeleryApp()
else:
    from celery import Celery
    app = Celery(f"application")
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
platforms.C_FORCE_ROOT = True


def retry_base_task_error():
    """
    celery 失败重试装饰器
    :return:
    """

    def wraps(func):
        @app.task(bind=True, retry_delay=180, max_retries=3)
        @functools.wraps(func)
        def wrapper(self, *args, **kwargs):
            try:
                return func(*args, **kwargs)
            except Exception as exc:
                raise self.retry(exc=exc)

        return wrapper

    return wraps

报错截图

image.png 不知道为啥报这个错,因为redis已经成功连接了,并且celery运行成功了,如下图:

image.png 问AI,AI一回答如下:

image.png

这几个我都试过,都没用,后面继续查资料发现需要在init.py中加入以下代码:

from .celery import app as celery_app

__all__ = ['celery_app']

这样就解决了。