跳转到主要内容

基于rq的简单Python库,用于存储Django发送的电子邮件并在后台使用工作进程处理它们

项目描述

django-rq-mail是一个简单的Python库,基于rq,用于存储Django发送的电子邮件并在后台使用工作进程处理它们。

由于django-rq-mail基于rq,它完全由Redis支持。

架构

django-rq-mail向Redis添加了新的元素来享受排序集

对于django-rq-mail的目的,它实现了WaitingQueue的概念,该概念使用时间戳延迟作业的处理。

rq的默认行为是通过BLPOP处理作业,当从任何给定队列中弹出元素时,它会阻塞连接。由于此行为,无法延迟处理作业,并且当它失败时,rq将其推送到失败队列。当然,您可以稍后重新排队此作业,但没有回退机制。

在django-rq-mail中,您可以定义回退步骤(以秒为单位)以重试作业,直到它不再失败。当一个作业在每个步骤上都被测试后,我们再次引入rq在将其推送到失败队列时的默认行为。

每个步骤都会创建一个等待队列,当任务失败时,我们记录当前时间戳加上延迟时间,以便未来重试。

http://yuml.me/895ce159

这种机制可以通过ZADD实现,它将序列化的任务添加到队列中并带有分数,通过ZREVRANGEBYSCORE返回分数在最大(当前时间戳)和最小之间的所有元素。

如您所理解的,我们已经取消了默认的阻塞行为,用每秒运行一次的守护进程来代替。

安装

  1. 要么从GitHub检出包,要么通过PyPI获取版本。

    pip install django-rq-mail
  2. 将‘rq_mail’添加到您的INSTALLED_APPS

    INSTALLED_APPS = (
        'rq_mail',
    )

以使用django-rq-mail提供的rq_mail命令(通过Django命令行)。

此命令是将rq集成到Django中的最小集成,用于启动分发器

  1. 定义EMAIL_BACKEND

    EMAIL_BACKEND = 'rq_mail.backends.RqBackend'
  2. 定义RQ_MAIL_EMAIL_BACKEND,这是用于发送电子邮件的后端,例如

    RQ_MAIL_EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

日志记录

RQ 0.3.3使用标准的Python的logging,这意味着您可以在django的settings.py中轻松配置rqworker的日志机制。例如

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'rq_console': {
            'format': '%(asctime)s %(message)s',
            'datefmt': '%H:%M:%S',
        },
    },
    'handlers': {
        'rq_console': {
            'level': 'DEBUG',
            'class': 'rq.utils.ColorizingStreamHandler',
            'formatter': 'rq_console',
            'exclude': ['%(asctime)s'],
        },
    },
    'loggers': {
        'rq.worker': {
            'handlers': ['rq_console'],
            'level': 'DEBUG'
        },
    }
}

使用方法

安装后,您可以从shell运行python manage.py rq_mail

配置

RQ_MAIL_PREFIX

用于命名由django-rq-mail创建的所有队列的前缀。

RQ_MAIL_MAIN_QUEUE

主队列的名称。

RQ_MAIL_EMAIL_BACKEND

在后台处理时用于发送电子邮件的电子邮件后端。

RQ_MAIL_REDIS_HOST

连接时使用的Redis主机。

RQ_MAIL_REDIS_PORT

连接时使用的Redis端口。

RQ_MAIL_REDIS_DB

连接时使用的Redis数据库。

RQ_MAIL_REDIS_PASSWORD

连接时使用的Redis密码。

RQ_MAIL_REDIS_URL

连接时使用的Redis URL。

RQ_MAIL_REDIS_SOCKET

连接时使用的Redis套接字。

RQ_MAIL_FALLBACK_STEPS

创建等待队列的时间表简单列表。

您可以定义任意多的步骤,每个步骤都会转换成一个队列。因此,如果您定义了10个步骤,您将允许消息失败10次,然后才会进入失败队列。

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

django-rq-mail-0.1.3.alpha.tar.gz (7.6 kB 查看哈希值)

上传时间

支持