基于rq的简单python库,用于存储django发送的电子邮件并在后台与工作人员一起处理
django-rq-mail的Python项目详细描述
django rq mail是一个简单的python库,基于rq来存储发送的电子邮件 通过Django并在后台与工人一起处理它们。
由于django rq邮件基于rq,所以它完全由Redis支持。
架构
django rq mail添加了新的元素来享受Sorted Sets 从Redis开始。
对于django rq邮件,它实现了^{tt1}的概念$ 它用时间戳来延迟作业的处理。
rq的默认行为是通过BLPOP处理作业 当没有要从任何给定队列中弹出的元素时阻止连接。 有了这种行为,就没有办法延迟作业的处理,当它失败时 rq将其放入失败的队列中。 当然,您可以稍后重新申请此作业,但没有回退机制。
在django rq邮件中,您可以定义回退步骤(以秒为单位),以重试作业,直到 这不是失败。当一项工作在每个步骤上都经过测试后,我们重新引入 rq在将其推入失败队列时的默认行为。
每个步骤都将创建一个等待队列,当作业失败时,我们将执行 当前时间戳和增量,以便将来重试。
这种机制可以通过ZADD来实现 在队列中添加带有分数和ZREVRANGEBYSCORE的序列化作业 返回排序集中得分介于max(当前时间戳)和min之间的所有元素。
正如您所理解的,我们已经放弃了默认的阻塞行为 替换为每秒钟运行的守护进程。
安装
从GitHub中签出包,或者通过pypi从发行版中提取包
pip install django-rq-mail
向您的INSTALLED_APPS
添加“rq_邮件”INSTALLED_APPS = ( 'rq_mail', )
使用django rq mail提供的rq_mail命令(通过django命令行)。
此命令是rq到Django的最小集成,以启动 dispatcher。
定义EMAIL_BACKEND
EMAIL_BACKEND = 'rq_mail.backends.RqBackend'
定义RQ_MAIL_EMAIL_BACKEND用于发送电子邮件的后端,例如
RQ_MAIL_EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
日志记录
rq 0.3.3使用标准python的logging,这意味着 您可以在django中轻松配置rqworker的日志记录机制 settings.py。例如:
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邮件创建的所有队列的前缀。
RQ_MAIL_MAIN_QUEUE
主队列的名称。
RQ_MAIL_EMAIL_BACKEND
电子邮件后端用于在后台处理电子邮件时发送电子邮件。
RQ_MAIL_REDIS_HOST
用来连接的redis主机。
RQ_MAIL_REDIS_PORT
用来连接的redis端口。
^ {tt15}$
用来连接的redis数据库。
RQ_MAIL_REDIS_PASSWORD
用于连接的redis密码。
RQ_MAIL_REDIS_URL
用于连接的redis url。
RQ_MAIL_REDIS_SOCKET
用来连接的redis套接字。
RQ_MAIL_FALLBACK_STEPS
创建等待队列的时间的简单列表。
您可以定义任意多个步骤,每个步骤都将转换为一个队列。 因此,如果定义了10个步骤,您将允许一条消息失败10次,直到它 将进入失败队列。