我在Django中有一个应用程序,需要在各种用例中向用户发送大量电子邮件.出于显而易见的原因,我不想在应用程序中同步处理此问题.
有没有人建议消息排队服务器与Python完美集成,或者他们已经在Django项目上使用过?我的堆栈的其余部分是Apache,mod_python,MySQL.
在您的特定情况下,它只是一个电子邮件队列,我将采取简单的方法并使用django-mailer.作为一个不错的方面,还有其他可插拔的项目,当他们在堆栈中看到它时,它们足够聪明,可以利用django-mailer.
至于更一般的队列解决方案,我还没有能够尝试其中任何一个,但这里有一个对我来说更有趣的列表:
pybeanstalk/beanstalkd
齿轮手的python接口(现在随着齿轮手的C版本的发布可能会更加有趣)
memcacheQ
跺脚
芹菜
到目前为止,我没有找到任何"好"的解决方案.我有一些更严格的软实时要求(从标签纸板箱拍照)所以可能其中一种方法足够快.我假设电子邮件可以等几分钟.
由cron作业处理的数据库中的"待办事项列表".
数据库中的"待办事项列表"由守护程序永久监视.
使用自定义守护程序,该守护程序由Web服务器通过UDP数据包通知(在今天的生产中).基本上我自己的Queing系统带有用于处理队列的IP堆栈.
使用ActiveMQ作为消息代理 - 由于稳定性问题,这没有用.对我来说,Java守护进程通常有些丰满
在CouchDB中使用更新触发器.不错但更新触发器并不意味着要进行繁重的图像处理,所以不适合我的问题.
到目前为止,我还没有尝试过RabbitMQ和XMPP/ejabebrd来处理这个问题,但是我们列出了下一个要尝试的东西.RabbitMQ在2008年获得了不错的Python连接,并且有大量的XMPP库.
但是,您可能只需要在本地计算机上配置正确的邮件服务器.这可能允许您将邮件同步转储到本地邮件服务器中,从而使整个软件堆栈更加简单.
Stompserver是一个不错的选择.它轻巧,易于安装,易于使用Django/python.
我们有一个在生产中使用stompserver的系统,用于发送电子邮件和异步处理其他作业.
Django将电子邮件保存到数据库,Django中的model.post_save处理程序向stompserver发送事件,stompserver将事件传递给执行异步任务(发送电子邮件)的使用者进程.
它可以很好地扩展,因为你可以在运行时添加消费者进程 - 两个消费者可以发送两倍的电子邮件,消费者可以在单独的机器上.一个轻微的复杂问题是每个消费者都需要自己的命名队列,因此Django需要知道有多少消费者可用,并以循环方式向每个队列发送事件.(两个听取同一队列的消费者都会得到每条消息=重复).如果您只想要一个消费者流程,那么这不是问题.
我们以前有一些进程可以连续轮询数据库以查找作业,但发现它为系统增加了很多负载,即使不需要处理任何内容也是如此.