Несколько серверов с FileSystemWatcher в одном каталоге - PullRequest
0 голосов
/ 14 сентября 2011

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

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

Вероятно, файлы будут поступать в пакетном режиме, а не по одному.Кто-нибудь знает подход к этому, который будет работать гарантированно?

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Попробуйте использовать один «мастер» сервис с FSW. Главный сервис обрабатывает все события FSW и команды «ведомые» сервисы на удаленных машинах для обработки определенного файла. Простая балансировка нагрузки, отсутствие нескольких проблем с FSW, база данных не требуется. Вы могли бы легко сделать это с WCF.

1 голос
/ 14 сентября 2011

У меня будет только один сервер / служба, которая будет отслеживать эту папку и записывать в путь к базе данных, а также изменять дату и событие (копировать, переименовывать ...), тогда вы сможете иметь все службы, которые вы хотите получить в одной из этих последних новых записей в эту таблицу, заблокируйте ее и обработайте. По сути, поскольку FSW плохо работает с параллелизмом, мы переносим обработку параллелизма в базу данных.

0 голосов
/ 14 сентября 2011

Я также предложу решение от Davide Piras. Но если вы все еще хотите, чтобы приложение для отслеживания файлов на нескольких серверах искало общий каталог, то следует помнить одно решение: вы создаете tcp-соединения между вашим приложением для отслеживания файлов, поскольку любой файл поступает в общий каталог, а затем все приложения для отслеживания файлов генерирует случайное число и делится этим числом друг с другом, после чего приложение, генерирующее наибольшее (или наименьшее) число, должно обработать этот файл. Таким образом, только одно приложение-наблюдатель файла будет обрабатывать файл

...