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

如何实现Celery消费者与Redis Broker断连时的邮件通知?

实现Celery Worker与Redis断连时自动发邮件

步骤1:自定义Consumer类重写连接错误处理方法

Celery的celery.worker.consumer.consumer类中,on_connection_error_after_connected方法会在Worker与Broker已建立连接后断开时触发。我们可以继承该类,重写方法添加邮件告警逻辑:

# 在Django项目的自定义模块(如celery_extensions.py)中编写
from celery.worker.consumer import Consumer
from django.core.mail import send_mail
from django.conf import settings

class CustomConsumer(Consumer):
    def on_connection_error_after_connected(self, exc, interval):
        # 先执行父类原有逻辑,保证重连机制正常运行
        super().on_connection_error_after_connected(exc, interval)
        
        # 构造告警邮件内容
        subject = "Celery Worker与Redis Broker断开连接警告"
        message = f"""
Celery Worker检测到与Redis Broker的连接已断开,正在尝试重连。
错误详情: {str(exc)}
下次重连间隔: {interval} 秒
        """.strip()
        from_email = settings.DEFAULT_FROM_EMAIL
        recipient_list = ["alert@your-domain.com"]  # 替换为实际接收告警的邮箱
        
        # 发送告警邮件,捕获异常避免影响Celery重连逻辑
        try:
            send_mail(subject, message, from_email, recipient_list, fail_silently=False)
        except Exception as mail_exc:
            self.logger.error(f"断连告警邮件发送失败: {str(mail_exc)}")

步骤2:配置Celery使用自定义Consumer

在项目的celery.py文件中,指定Worker使用我们自定义的Consumer类:

from celery import Celery
from django.conf import settings
from .celery_extensions import CustomConsumer

app = Celery('your_project_name')

# 加载Django配置
app.config_from_object('django.conf:settings', namespace='CELERY')

# 绑定自定义Consumer
app.conf.worker_consumer = CustomConsumer

# 自动发现项目中的Celery任务
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

步骤3:配置Django邮件发送参数

确保在settings.py中正确配置邮件后端(以SMTP为例):

# settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.your-domain.com'  # 替换为你的SMTP服务器地址
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'sender@your-domain.com'
EMAIL_HOST_PASSWORD = 'your-email-password-or-app-token'
DEFAULT_FROM_EMAIL = 'sender@your-domain.com'

额外注意事项

  • 可以添加频率控制逻辑(比如用内存变量或Redis缓存记录上次发送邮件的时间),避免短时间内多次断连导致邮件轰炸。
  • 确保Celery Worker进程能访问Django的邮件配置,且网络环境允许Worker连接到SMTP服务器。
  • 测试时可手动停止Redis服务,观察Worker日志和邮箱,验证告警逻辑是否正常触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:42:20