2012-03-14 4 views
2

Мы должны отправить автоматические электронные письма. Они должны быть надежно отправлены, поэтому мы записываем их в базу данных. Одновременно System.Threading.Timer, который был запущен в Application_Start, вызывает метод каждые 30 секунд для считывания из базы данных и отправки затем удаления записей, которые были отправлены. Ничто из этого не происходит как долговременная задача. Была предпринята попытка убедиться, что процесс очистки db-очереди использует асинхронные методы, поэтому фаза отправки/очереди никогда не блокируется, при этом весь процесс выполняется кратковременными методами в ThreadPool. Стоимость аппликации приложений также минимальна (возможно, это связано с повторной отправкой одного электронного письма ... не проблема).Неправильно ли запускать мою почтовую очередь в пуле приложений?

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

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

+0

Вы как-то указываете в базе данных, что данное письмо было подобрано и находится в процессе отправки? Если нет, планируете ли вы работать на нескольких веб-серверах? Если ответы на вышеперечисленные вопросы - «Нет» и «Да», то вам потребуется способ предотвратить одновременное отправку одной и той же группы писем одновременно. –

+0

@ChrisShain, я знаю об этом и изменим архитектуру, если сайт будет развиваться до такой степени, что он перерастет свой сервер. – spender

+0

Держите таймер, я сделал аналогичную работу по работе с таймером для своей программы и отлично работал последние 4 года - никаких проблем вообще, я даже делаю идексинг, который занимает 2 дня, работая с одним потоком и таймером. Также читайте: http://msdn.microsoft.com/en-us/magazine/cc164015.aspx – Aristos

ответ

2

Если ваш сайт не используется, ваш пул приложений не будет запущен - никакая почта не отправляется.

+0

Это правда. Интересно, как плохо удалить таймаут, который отключает пул приложений после бездействия? Мы единственное приложение, работающее на рассматриваемой машине. – spender

+0

Я не могу придумать никаких проблем с удалением таймаута. Если ваш сайт используется редко, поэтому вам нужно беспокоиться о перезагрузке из-за неактивности, вам нужно подумать о других случаях, когда пул приложений перезапускается (например, перезагрузка), но ваш сайт не запускается автоматически. Рассмотрим некоторые внешние сторожевые устройства, которые периодически будут пинговать сайт, даже локальную запланированную задачу, которая будет делать только страницу GET на сайте. –

+0

его почти невозможно, чтобы сайт не использовался - google читает почти все сайты каждую секунду. – Aristos

1

Пишущие услуги является PITA

Я думаю, что это субъективно. Однако, разве вы не думаете, что было бы выгодно поставить его на службу? Если вы хотите изменить свою реализацию, намного легче поддерживать небольшие, отдельные компоненты в моем опыте. Обычно это становится больше PITA, когда у вас есть все в одном месте.

Вы уже пишете письма в базу данных. Очень просто написать простую службу Windows, которая просто сканирует базу данных и отправляет электронные письма. Я знаю, что это может быть не идеальным, но есть много примеров, которые можно встретить на SO и в других местах. Вам не обязательно получать все фантазии и использовать ESB (если вы не хотите).

Так что в конце концов, только потому, что вы может не означает, что вы должны. Вы должны взвесить затраты и выгоды.

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