我有一个应用程序在Django,这需要发送大量的电子邮件用户使用的各种使用情况。我不想处理这个同步应用程序内的出于显而易见的原因。

有人提出的任何建议的消息,排队服务器的整合以及与蟒蛇,或者他们已经用上Django项目?我的余堆是Apache,mod_python,MySQL.

有帮助吗?

解决方案

到目前为止,我还没有找到"好"解决方案。我有一些更严格的软实时的要求(把一个画面从一个纸板箱被标记的)这样一个办法是足够快的速度。我认为电子邮件可以稍等几分钟。

  • 一个"待办列表"中的数据库进行处理通过一个定时的工作。
  • 一个"待办列表"中的数据库进行处理永久beeing调查的一个进程。
  • 使用定制的守护程序,它得到通知webserver通过UDP(在生产今天)。基本上我自己的排队系统的IP叠处理的队列。
  • 使用说作为一种信息经纪人 -这没有工作,因为稳定性问题。还给我Java程序通常是有点胖
  • 使用更新的触发器在CouchDB.好的,但更新触发器并不意味着要做到沉重的图像处理,所以没有适合我的问题。

到目前为止,我还没有尝试过RabbitMQ与。/ejabebrd处理的问题,但他们是我的名单上的下一个事情要尝试。RabbitMQ有体面的蟒蛇的连通性在2008年并没吨。图书馆。

但也许所有你需要的是一个正确配置的邮件服务器上的当地机。这可能会让你倾倒邮件同步进入当地的邮件服务器,并因此使你的整个软件更加简单。

其他提示

在特定情况下,它只是一个电子邮件排队,我wold采取简单的办法和使用 django邮件.作为一个很好的副bonues还有其他可插入的项目有足够的智慧,以利用戈-梅勒,当他们看到它在栈。

至于更一般的队列解决方案,我没有尝试任何这些,但这是一个列表那些看起来更有趣的对我说:

  1. pybeanstalk/beanstalkd
  2. 蟒蛇的接口,以控制这个不 (这可能是更有趣的现有释放 C版本控制这个不)
  3. memcacheQ
  4. 跺脚
  5. 芹菜

Stompserver是一个好的选择。它的重量轻,易于安装和易于从Django中/蟒使用。

我们有使用stompserver在生产用于异步向用户发送电子邮件和处理其他作业的系统。

Django的保存的电子邮件到数据库中,在Django一个model.post_save处理程序将事件发送到stompserver和stompserver将事件传递到消费者的过程,的确异步任务(发送邮件)。

这大大加快了相当不错,因为你可以在运行时添加的消费过程 - 两位消费者可以发送两倍的电子邮件,并且消费者可以在单独的机器上。一个稍微复杂的是,每个消费者都需要自己命名的队列,以便Django的需要知道有多少消费者可用,并且将事件发送到每个队列在循环赛的方式。 (两位消费者监听同一队列都将获得每封邮件=重复)。如果你只想要一个消费过程,那么这是不是一个问题。

我们以前有它连续地轮询的数据库工作,但发现它加入了很多负载的系统,需要即使没有任何要处理的过程。

只需添加电子邮件到数据库,然后再另写脚本运行的一些任务调度程序(的cron想到)发送电子邮件。

您可能想看看 pymq 。它是用Python编写的,会谈HTTP与它的客户,并允许对队列的监控和管理选项的主机。

这有什么错用邮件基础架构解决这个?像,每一个应用程序服务器上运行自己的邮件守护进程将排队任何本地提交的邮件,里面着一个集中的邮件服务器,可以做邮件繁重?

http://www.snakemq.net/ 可能工作以及

如果您已经安装了MySQL,你可以创建一个表作为排序的“待办事项列表”来使用。

线程同步作业添加到表,和他们完成了任务批处理删除工作。

这样的话,就没有必要安装和学习更多的软件,并且你不发的大量的电子邮件(如> 10 /秒,它应该是一个持续的工作专卖店正常工作这么久)。

这里的一个懒惰但正确和充分的解决方案。使用以下数据库表作为队列。

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
);

发件人应插入新行该表的末尾。

设置工作线程弹出邮件一个在从另一端(最低ID)的时间,并尝试将其发送。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top