2014-02-13 3 views
0

Я запускаю приложение django, и когда происходит какое-то событие, я бы хотел отправить электронное письмо в список получателей.Простой способ отправки писем асинхронно

Я знаю, что использование сельдерея было бы разумным выбором, но я хотел бы знать, есть ли другой, самый простой способ сделать это, не устанавливая сервер брокера, супервизор для обработки процесса демона, работающего в фоновом режиме ...

Я бы хотел найти более простой способ сделать это и при необходимости изменить его на сельдерей. Я не отвечаю за производственный сервер, и я знаю, что у парня, который его запускает, будут большие проблемы, чтобы настроить всю конфигурацию. Я думал об активации команды django, которая открывает несколько процессов с использованием библиотеки многопроцессорности или что-то в этом роде.

ответ

0

Это, как правило, хороший вариант использования для очереди. Если вы не хотите запускать сервер очереди (например, сельдерей) локально, у вас есть несколько вариантов.

  1. Там есть ряд услуг очереди SaaS там, такие как Amazon SQS (и любое число других), которые вы можете подключить в приложение без необходимости использования дополнительных сервисов, запущенных на вашем компьютере.

  2. Вы можете реализовать своего рода «бедный человек» с базой данных и заданием cron. В этом случае, когда происходит ваше событие, вы можете замять некоторую информацию в своей базе данных. Затем вы можете запустить cron job с management command, который сканирует вашу таблицу «поставленных сообщений» и периодически отправляет электронные письма. Обратите внимание, что это действительно работает только при условии, что ваша очередь сообщений остается относительно небольшой - если у вас так много сообщений для отправки, вам придётся подумать о том, что несколько процессов отправляют сообщения, что открывает банку червей, предназначенный для решения в первую очередь.

0

Если вы не хотите, чтобы реализовать сельдерей (на мой взгляд, не так уж трудно установить), то вам лучше всего, вероятно, реализующий очень простой очереди, используя либо базы данных. Это, вероятно, работать по линии этого:

  1. система определяет, что письмо должно быть отправлено и создает строку в базу данных со статусом бытия «создал» или «очередь»
  2. С другой стороне будет процесс, который периодически сканирует вашу «очередь». Если они найдут что-нибудь для отправки (в этом случае любые строки, которые со статусом «созданы/поставлены в очередь», они будут обновлять статус до «отправки»). Затем процесс перейдет к отправке письма и, наконец, обновит статус для отправки.

Это будет заботиться и асинхронно отправки объектов и отслеживания статусов всех сообщений электронной почты должны все идет наперекосяк.

Вы могли бы потенциально пойти с бэкэндом Redis для вашей очереди, если дополнительные обновления слишком налогообложения в вашей базе данных также.

+0

Не может быть ужасно сложно для вас, но это не похоже на прогулку в парке http://docs.celeryproject.org/en/latest/dja NGO/Первые шаги-с-django.html- – surfer190

Смежные вопросы