Запланированные задачи для веб-приложений

Какие существуют подходы к созданию запланированных задач для веб-приложений с отдельным веб-приложением или приложением для настольных ПК или без него?


person Krishna Kumar    schedule 22.08.2008    source источник


Ответы (11)


Если мы говорим о платформе Microsoft, то я всегда разрабатывал отдельную службу Windows для обработки таких пакетных задач.

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

person Ian Nelson    schedule 22.08.2008

Джефф обсуждал это в блоге Stack Overflow — https://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

По сути, Джефф предложил использовать CacheItemRemovedCallback в качестве таймера для вызова определенных задач.

Я лично считаю, что автоматизированные задачи должны обрабатываться как служба, запланированная задача Windows или задание в SQL Server.

Под Linux проверьте cron.

person Seibar    schedule 22.08.2008

Я думаю, что сам Stack Overflow использует истечение срока действия ApplicationCache для запуска фонового кода через определенные промежутки времени.

person Eric Z Beard    schedule 22.08.2008

Если вы используете хост Linux, вы почти наверняка будете использовать cron.

person ceejayoz    schedule 22.08.2008

В Linux вы можете использовать задания cron (http://www.unixgeeks.org/security/newbie/unix/cron-1.html), чтобы планировать задачи.

Используйте сборщики URL-адресов, такие как wget или curl, для выполнения HTTP-запросов GET.

Защитите свои URL-адреса с помощью аутентификации, чтобы никто не мог выполнять задачи, не зная пользователя/пароля.

person Marcel    schedule 22.08.2008

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

person Nick    schedule 22.08.2008

Это может быть или не быть тем, что вы ищете, но прочитайте эту статью "Моделирование служба Windows, использующая ASP.NET для запуска запланированных заданий". Я думаю, что StackOverflow может использовать этот метод, или, по крайней мере, об этом говорили.

person Jason Shoulders    schedule 22.08.2008

Там, где я работаю, мы использовали очень простой метод:

  1. Настройте веб-сервис/веб-метод, который выполняет задачу. При желании этот веб-сервис можно защитить с помощью имени пользователя/пароля.
  2. Создайте консольное приложение, которое вызывает эту веб-службу. При желании вы можете заставить консольное приложение отправлять параметры и/или возвращать какие-то метрики для вывода на консоль или во внешнее ведение журнала.
  3. Запланируйте этот исполняемый файл в выбранном планировщике задач.

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

person Daniel Auger    schedule 22.08.2008

Используйте сборщики URL-адресов, такие как wget или curl, для выполнения HTTP-запросов GET.

Защитите свои URL-адреса с помощью аутентификации, чтобы никто не мог выполнять задачи, не зная пользователя/пароля.

Вы также можете указать cron, например, запускать php-скрипты напрямую. И вы можете установить разрешения для файла PHP, чтобы другие люди не могли получить к ним доступ, или, что еще лучше, не размещайте эти служебные сценарии в доступном через Интернет каталоге...

person Polsonby    schedule 22.08.2008

Java и Spring — используйте кварц. Очень красиво и надежно -- http://static.springframework.org/spring/docs/1.2.x/reference/scheduling.html

person DustinB    schedule 15.09.2008

Я думаю, что есть более простые способы, чем использование cron (Linux) или планировщика заданий (Windows). Вы можете встроить это в свое веб-приложение, используя: (a) кварцевый планировщик,

или если вы не хотите интегрировать другую стороннюю библиотеку в свое приложение: (b) создайте поток при запуске, который использует стандартный класс Java 'java.util.Timer' для выполнения ваших задач.

person Tim Cooper    schedule 23.09.2011
comment
Большая ошибка при этом заключается в том, что когда у вас есть веб-служба, работающая на нескольких узлах, вы не хотите, чтобы ваш планировщик запускался несколько раз одновременно. - person Chris Seufert; 10.11.2014