2010-04-01 2 views
0

сервер ввода - файлы типа JPG, TIF, RAW, PNG, MOV приходят через FTPПопытка определить лучший дизайн для этого процесса - C# - 3,0

должен быть водяными, если это применимо Каждый файл и мета данные, добавленные в файл

Затем каждый файл необходимо перенести в каталог заказов, в котором создается файл заказа, а затем упакован как zip-файл и перемещен на сервер обработки.

Файл имена из [orderid_userid_guid]. [Jpg | TIF | мы | PNG ...]

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

ответ

1

Я мог бы настроить систему очередности сообщений и обработки.

Один процесс/нить/услуга будет отслеживать FTP-сервер, а также при появлении новых файлов, будут захватывать их и складывать их в очередь (возможно, MSMQ или просто промежуточной папки и т.д.)

Другой процесс контролирует эту очередь, и когда появляется файл, он захватывает его и делает водяные знаки/метаданные/etc., а затем переносит его в другую очередь/папку.

Другой процесс контролирует эту очередь и захватывает новые файлы для zipping. После застегивания закройте другую очередь.

... и прочее.

Вы можете настроить «рабочие диспетчеры» в конце каждой очереди, чтобы захватить файлы и отправить их, как многие рабочие потоки, которые вы хотите.

Вам не обязательно разделять его на многие отдельные процессы и очереди - это зависит от вас, чтобы решить. «Очереди» могут быть реализованы несколькими различными способами. Вы могли бы взглянуть на MSMQ как на начальную, но вы также можете рассмотреть возможность перемещения файлов между папками и т. Д. WCF и Windows Workflow Foundation могут быть хорошими технологиями для поиска в первую очередь.

+0

Andy. Если мой том большой, я могу получить производительность обработки файлов сразу для определенного этапа. например, могу ли я переместить 100 файлов в Q, которые предназначены для водяных знаков и что слушатель этого Q работает с таким количеством файлов, которые он может в любой момент? – ltech

+0

Я бы, вероятно, создал пул потоков «рабочих потоков» и другой поток, чтобы действовать как слушатель/диспетчер. Диспетчерский поток будет извлекать один файл, а затем передать его рабочему потоку для обработки. Когда рабочий закончен, он помещает файл в следующую очередь, а затем возвращается в состояние ожидания в пуле потоков, чтобы дождаться следующего элемента. Задача диспетчера состоит в том, чтобы следить за файлом «queue/folder» и рукой отдельных файлов для рабочих потоков. WCF может на самом деле сделать все это для вас довольно легко. –

+0

Энди, можете ли вы рассказать о WCF или указать ссылку? – ltech

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