使用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