我在Django上开发了一个应用,需要向各种使用情况下的用户发送大量电子邮件。出于明显的原因,我不想在应用程序中同步处理此操作。
请问有没有人可以推荐一款与Python良好集成或已在Django项目上使用过的消息队列服务器?我的技术栈还包括Apache、mod_python和MySQL。
我在Django上开发了一个应用,需要向各种使用情况下的用户发送大量电子邮件。出于明显的原因,我不想在应用程序中同步处理此操作。
请问有没有人可以推荐一款与Python良好集成或已在Django项目上使用过的消息队列服务器?我的技术栈还包括Apache、mod_python和MySQL。
针对您的具体情况,因为只是一个电子邮件队列,我会采用简单方法,使用django-mailer。作为额外的好处,有其他可插拔的项目当在堆栈中看到django-mailer时,它们会聪明地利用它。
至于更一般的队列解决方案,我还没有尝试过任何一个,但这里有一些看起来更有趣的选择:
目前我还没有找到“好”的解决方案。我的一些软实时要求更加严格(例如从一个纸盒上拍照并进行标记),因此或许这些方法中有一个足够快。我认为电子邮件可以等待几分钟。
到目前为止,我还没有尝试使用RabbitMQ和XMPP/ejabebrd来处理该问题,但它们已经在我的下一个尝试列表中。RabbitMQ在2008年获得了不错的Python连接性,并且有大量的XMPP库。
但是也许你所需要的就是正确配置本地计算机上的邮件服务器。这可能会使您整个软件堆栈更加简单,可以将邮件同步转储到本地邮件服务器中。
使用邮件基础设施解决这个问题有什么问题吗?比如,每个应用服务器都运行自己的邮件守护进程,它们将排队任何本地提交的邮件,然后转发到一个集中的邮件服务器,该服务器可以处理邮件重负载?
这里有一个懒惰但正确且足够的解决方案。使用以下数据库表作为队列。
drop table if exists mailqueue;
create table mailqueue (
id bigint primary key,
subject text not null,
body mediumtext not null,
from varchar(255) not null,
to varchar(255) not null
);
如果您已经安装了MySQL,可以创建一个用作“待办事项列表”的表。
线程同步将作业添加到表中,批量任务会在完成后删除作业。
这样做的好处是不需要安装和学习更多的软件,并且只要您不发送大量电子邮件(如每秒钟>10封),它应该可以很好地作为持久性作业存储工具。