使用Gearman作为消息队列的异步电子邮件和短信发送的代理后端/工作线程。

django-gearman-prox的Python项目详细描述


django gearman proxy是django应用程序,包含用于异步电子邮件和短信发送的后端/工作者 使用gearman作为消息队列。

工作原理

电子邮件

此应用程序允许您在不阻塞当前线程的情况下异步发送电子邮件,而 通过各种后端发送电子邮件。

项目设置文件中的此设置执行以下操作:

# E-mails are sent to proxy backend.
EMAIL_BACKEND = 'django_gearman_proxy.backends.mail.EmailBackend'

# Email backend to be used inside of mail sender worker.
GEARMAN_EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

在本例中,所有电子邮件都发送到在设置email_backend中定义的代理电子邮件后端 'django_gearman_proxy.backends.mail.emailbackend'。此后端将电子邮件序列化为json格式,并 将其作为后台作业提交到gearman消息队列。django gearman代理包含异步电子邮件工作进程 实现为django命令。你必须启动这个命令才能让魔法生效。

$ python manage.py send_email

send_email命令启动并运行之后,它会从gearman消息队列中提取电子邮件作业, 在本例中,从json取消序列化,并通过gearman_email_backend中定义的后端发送。 'django.core.mail.backends.smtp.emailbackend'。此体系结构允许直接从 您的django应用程序,不阻止请求/响应周期,因为电子邮件是在后台发送的。

sms消息

此应用程序使您能够在不阻塞当前线程的情况下异步发送短信,而 通过各种后端发送短信。

项目设置文件中的此设置执行以下操作:

# Sms messages are sent to proxy backend.
SMS_BACKEND = 'sendsms.backends.smssluzbacz.SmsBackend' = 'django_gearman_proxy.backends.sms.SmsBackend'

# Sms backend to be used inside of sms sender worker.
GEARMAN_SMSL_BACKEND = 'sendsms.backends.smssluzbacz.SmsBackend'

在本例中,所有的sms消息都发送到在设置sms_backend中定义的代理sms backend 'django_gearman_proxy.backends.sms.smsbackend'。此后端将sms消息序列化为json格式,并 将其作为后台作业提交到gearman消息队列。django gearman代理包含异步sms工作进程 实现为django命令。你必须启动这个命令才能让魔法生效。

$ python manage.py send_sms

send_sms命令启动并运行之后,它会从gearman消息队列中提取sms消息作业, 从json取消序列化,并通过gearman_sms_backend中定义的后端发送,在本例中 'sendsms.backends.smssluzbacz.smsbackend'。此体系结构允许直接从 您的django应用程序,不阻塞请求/响应周期,因为sms消息是在后台发送的。

有关如何作为异步工作程序运行命令的详细信息,请 请参阅django-gearman-commands

要求

  • python 2.7+
  • django
  • django_gearman_commands
  • smssluzbacz-api
  • django-sendsms
  • python-gearman
  • running gearman daemon

安装

通过pypi安装或将此模块复制到项目或pythonpath中。

将django_gearman_proxy放入projects settings.py文件中已安装的应用程序中

INSTALLED_APPS = (
    'localeurl',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'django.contrib.sitemaps',
    'web',
    'debug_toolbar',
    'rosetta',
    'south',
    'django_gearman_proxy'
)

配置

django settings.py常量

# E-mails are sent to proxy backend.
EMAIL_BACKEND = 'django_gearman_proxy.backends.mail.EmailBackend'

# Email backend to be used inside of mail sender worker.
GEARMAN_EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

# Serializers for transporting EmailMessage object via gearman protocol.
GEARMAN_EMAIL_SERIALIZER = 'django_gearman_proxy.serializers.mail.json.serialize'
GEARMAN_EMAIL_UNSERIALIZER = 'django_gearman_proxy.serializers.mail.json.unserialize'


# Sms messages are sent to proxy backend.
SMS_BACKEND = 'django_gearman_proxy.backends.sms.SmsBackend'

# SMS backend to be used inside of sms sender worker.
GEARMAN_SMS_BACKEND = 'sendsms.backends.smssluzbacz.SmsBackend'

# Serializers for transporting SmsMessage object via gearman protocol.
GEARMAN_SMS_SERIALIZER = 'django_gearman_proxy.serializers.sms.json.serialize'
GEARMAN_SMS_UNSERIALIZER = 'django_gearman_proxy.serializers.sms.json.unserialize'

测试

在evnironment上测试

  • Xubuntu Linux 12.04.1 LTS precise 64-bit
  • python 2.7.3+
  • python unittest
  • django 1.4.5
  • gearmand 1.1.1

运行测试

要从django项目运行测试,请运行命令:

$ python manage.py test django_gearman_proxy

作者

字符(vladimír gorej,codescale s.r.o.)
电子邮件:gorej@codescale.net
网页:http://www.codescale.net/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
oop是Java中装饰器模式的替代方案吗?   java Kafka使用者进程和线程与主题分区的关系是什么   java进程。破坏不起作用   java问题,声明Map<String,Class<?扩展可序列化>>   涉及泛型的java类型安全异构容器   用于转换native2ascii和native2ascii的java库   java填充对象字段的简单方法   java如何将正确的数组返回到方法中并正确修复主方法   java如何解析日期字符串,如'21Jul12'   在Python或Java中旋转图像的更快方法   java异步任务在构造函数处取消   安全性在java中有加密代码的选项吗?它应该只在运行时解密和执行?   java如何编译。jrxml仅一次   java错误Msg=ORA00932:数据类型不一致:预期日期为二进制   java如何设置每行不同的JTextArea文本对齐方式?