Лучший способ использовать папку SFTP в качестве параллельной рабочей очереди - PullRequest
0 голосов
/ 06 апреля 2010

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

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

Ответы [ 4 ]

1 голос
/ 06 апреля 2010

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

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

0 голосов
/ 06 апреля 2010

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

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

0 голосов
/ 06 апреля 2010

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

0 голосов
/ 06 апреля 2010

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

На одной машине или на разных?

...