Механизм Джеффа состоял в том, чтобы создать какой-то кешированный объект, который ASP.Net автоматически воссоздает через некоторый промежуток времени. Казалось, что это решение для ASP.Net, поэтому, вероятно, вам (или мне) мало что поможет Мир Java.
См. https://stackoverflow.fogbugz.com/default.asp?W13117
Этвуд: Ну, я изначально спросил в Твиттере, потому что я просто хотел что-то более легкое. Я действительно не хотел писать сервис Windows. Я чувствовал, что это было вне группового кода. Плюс код, который фактически выполняет эту работу, на самом деле является веб-страницей, потому что для меня это логическая единица работы на веб-сайте - это веб-страница. Итак, это действительно так, как будто мы перезваниваем на веб-сайт, это как очередной запрос на веб-сайте, так что я рассматривал его как нечто, что должно оставаться встроенным, и тот небольшой подход, который мы предложили, который был рекомендован мне в Twitter По сути, нужно было что-то добавить в кеш приложения с фиксированным сроком действия, затем у вас есть обратный вызов, поэтому, когда он истекает, он вызывает определенную функцию, которая выполняет свою работу, а затем вы добавляете это обратно в кеш с тем же сроком действия. Так что это немного, может быть, «гетто» - правильное слово.
Мой подход всегда заключался в том, чтобы ОС (т. Е. Cron или планировщик задач Windows) загружала определенный URL-адрес через некоторый интервал, а затем настраивала страницу по этому URL-адресу, чтобы проверить ее очередь и выполнить все необходимые задачи, но Мне было бы интересно узнать, есть ли лучший способ.
Из стенограммы видно, что FogBugz использует службу Windows, также загружающую подход с использованием URL.
Спольский: Итак, у нас есть специальная страница, которая называется heartbeat.asp. И эта страница, когда бы вы ни нажали ее, и любой может ее открыть в любое время: не повредит. Но когда эта страница запускается, она проверяет очередь ожидающих задач, чтобы увидеть, нужно ли что-то делать. И если есть что-то, что нужно сделать, он делает одно, а затем снова просматривает эту очередь, и если что-то еще нужно сделать, он возвращает плюс, а вся возвращаемая веб-страница представляет собой просто один символ с плюсом. в этом. И если больше ничего не нужно делать, очередь теперь пуста, она возвращает минус. Таким образом, любой может вызвать это и нажать его столько раз, вы можете загрузить heartbeat.asp в своем веб-браузере, нажимая Ctrl-R Ctrl-R Ctrl-R Ctrl-R, пока не начнете получать минусы вместо плюсов. И когда вы это сделаете, FogBugz выполнит все необходимые работы по обслуживанию. Итак, это первая часть, а вторая - очень, очень простая служба Windows, которая запускается, и вся ее задача - вызывать heartbeat.asp, и если он получает плюс, вызовите его снова в ближайшее время, и если он получит вызов минус это снова, но не на некоторое время. Так что, по сути, есть эта служба Windows, которая всегда работает, которая имеет очень, очень, очень простую задачу: просто нажать на URL, посмотреть, получит ли он плюс или минус и, а затем составить расписание при повторном запуске в зависимости от того, у него есть плюс или минус. И, очевидно, вы можете делать любые вариации на эту тему, например, вы можете вместо того, чтобы возвращать только плюс или минус, вы можете сказать: «Хорошо, перезвони мне через 60 секунд» или «Перезвони мне прямо». прочь у меня еще много работы. " И вот как это работает ... так что сервисное обслуживание просто запускается, вы знаете, это как, вы знаете, половина страницы кода, который выполняет сервисное обслуживание, и его никогда не нужно менять, и у него нет никакого логики там, это просто содержит щекотку, которая заставляет эти веб-страницы вызываться с определенной гарантированной частотой. И внутри этой веб-страницы в heartbeat.asp есть код, который поддерживает очередь задач, которые необходимо выполнить, и смотрит, сколько времени прошло, и выполняет, вы знаете, ночное обслуживание и каждые семь дней удаляет все старые сообщения, которые были помечены как спам и все виды просто фоновые задачи обслуживания. И вот как это происходит.