2010-04-06 3 views
0

Я пишу службу windows C#, которая будет опроса SFTP-папки для новых файлов (один файл = одно задание) и обработки их. Несколько экземпляров службы могут работать одновременно, поэтому важно, чтобы они не наступали друг на друга.Лучший способ использования папки SFTP в качестве параллельной рабочей очереди

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

ответ

0

Несколько экземпляров службы могут работать одновременно

На той же машине, или различные из них?

+0

О разных –

0

Не уверен, что перемещение файла в Windows является атомной операцией. Если это так, то когда служба выбирает работу над файлом, она должна попытаться переместить файл в другую папку. Если операция перемещения прошла успешно, безопасно работать с файлом.

1

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

Способ, которым я занимался в прошлом, заключается в том, чтобы программа захватила первый файл и сразу же переименовала его из файла 'filename.txt' в 'filename.txt.processing'. Процессы будут настроены так, чтобы игнорировать любой файл, заканчивающийся «.processing», чтобы они не наступали друг на друга. Я не думаю, что переименование файла совершенно атомно, но у меня никогда не было никаких проблем с ним.

0

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

Это добавляет усложнение обновления таблицы новыми файлами.

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