FileSystemWatcher против MSMQ.Что выбрать? - PullRequest
1 голос
/ 15 марта 2012

У меня есть сервер, который скоро начнет получать файлы.Файлы будут помещены в папку.Я должен читать файлы и сохранять данные в моем БД одновременно.Могу ли я просто использовать FileSystemWatcher, чтобы следить за папкой, а затем обрабатывать файлы, когда наблюдатель находит новый файл?Или я должен также использовать MSMQ, чтобы файлы помещались в очередь после того, как наблюдатель найдет новый файл?Излишне ли использовать MSMQ?MSMQ - это хорошая вещь, но пока наблюдатель заботится только об одном файле за раз, я не слишком уверен, действительно ли необходимо использовать MSMQ.Будет ли FileSystemWatcher достаточно, чтобы гарантировать, что одновременно обрабатывается только один файл?Если процесс файла не удался, файл все равно будет в папке, поэтому он не будет потерян.Поэтому в основном мне приходится выбирать между этими двумя моделями:

Входящий файл -> Файл помещается в папку -> Наблюдатель видит файл -> Код, стоящий за наблюдателем, считывает файл и сохраняет его в БД -> Watcher возвращается кпапка для ожидания нового файла.

или

Входящий файл -> Файл помещен в папку -> Watcher видит файл -> Watcher помещает сообщение (содержит путь к файлу) вочередь и возвращается к просмотру папки -> QueueWatcher видит сообщение, считывает файл с пути и сохраняет данные в БД -> QueueWatcher перезапускается для прослушивания очереди на наличие новых сообщений.

Ответы [ 4 ]

1 голос
/ 15 марта 2012

Следует иметь в виду, что ваша система будет получать много файлов за короткий промежуток времени. Как указано в документации MSDN :

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

Так что, если это так, вы можете использовать другой подход, скажем, просто опросить службу и вести учет обработанных файлов.

0 голосов
/ 15 марта 2012

У меня была похожая проблема, чтобы решить. После использования FileSystemWatcher я изменил его так, чтобы часть системы, записывающая файлы, уведомляла другую сторону явным сообщением, отправленным через сокет TCP, что новый файл готов.

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

0 голосов
/ 15 марта 2012

Исходя из моего опыта, MSMQ более сложен, сложен в разработке и сложен в обслуживании, чем, например, служба Windows, написанная на C #, которая использует FileSystemWatcher.

Но я предпочитаю другой способ: уведомить файловый сервер с помощьюкасаясь веб-службы, уведомляющей о том, что новый файл прибыл.

0 голосов
/ 15 марта 2012

Попробуйте FileSystemWatcher только.Если этого недостаточно, вы можете расширить свое решение.Бритва Оккама все еще стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...