2011-01-14 4 views
1

Вот сценарий. У меня есть приложение, которое может быть в постоянной связи с сервером по нескольким причинам. Есть три общих набора объектов, которые мне нужно получить или отправить на веб-сервер.Quartz .Net вопрос архитектуры

  1. Объекты бизнес-данных. Это, по сути, данные, которые сбрасываются с сервера на клиентские компьютеры и хранятся в локальной базе данных. ЕСЛИ пользователь обновляет данные на своем локальном компьютере, он становится помеченным и должен быть отправлен для синхронизации с сервером. Примерно 6 пользовательских классов, которые должны будут вытащить данные и отправить данные на сервер (при необходимости).

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

  3. Запрос на подключение/Логин. Эти синхронизаторы будут извлекать информацию пользователя с сервера и регулярно проверять наличие обновленной информации и проверять разрешения. Также должна быть проверка, чтобы убедиться, что приложение подключено к серверу, и если соединение потеряно, тогда обработайте его соответствующим образом.

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

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

  2. Синхронизация объектов бизнес-данных будет самой тяжелой нагрузкой в ​​разы. Когда пользователь сначала входит в систему или получает дополнительные разрешения, им может потребоваться загрузить до 10K объектов/записей с сервера. Это было бы редким явлением, и в идеале пользователь подключился бы, все данные будут загружены, а через 5-10 минут они смогут использовать приложение для своих целей. Эта синхронизация должна будет постоянно проверять сервер, чтобы узнать, являются ли они новыми данными и контролируют локальные данные, чтобы увидеть, нужно ли отправлять новые данные на сервер. Имеет ли смысл иметь фабрику обрабатывать все это с собственным пулом потоков, скажем, 10 потоков?

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

Спасибо!

+0

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

+0

Ну, мышление заключается в том, что, хотя бизнес-объекты могут загружаться или загружаться, случайный запрос файла может быть быстро обработан. Сначала я думал о том, что задание задания на файл имеет более высокий приоритет, но наличие выделенных пулов потоков для различных разделов кажется, что он может быть более чистым и более эффективным во время интенсивной обработки. Есть ли проблема с использованием нескольких пулов потоков или плохой дизайн? – tc44

ответ

1

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

Реализация по умолчанию, Quartz.Simpl.SimpleThreadPool, имеет фиксированное (настраиваемое) количество потоков, все с тем же (настраиваемым) приоритетом.

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

+0

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

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